我遇到了一个问题,因为我正在编码一个不支持dpi的流程,直到修复了一个bug。在Win81 +不支持dpi的流程中,找出缩放因子
所以现在我需要做一个解决。我的想法是这样的:找出放大因子,并给我的元素宽度/高度缩小那么多。
所以现在我正在绘制一幅全高和第二个监视器的画布,它的编号为1920 x 1080
(WxH)。但是有意思的是(通过截图后的photoshop测量),它的出现是2880 x 1620
。这是一个放大系数1.5(2880除以1920或1620除以1080)。
我试图让dpi,采用的GetDeviceCaps
和EnumDisplaysettings
方法,但所有的人都返回到主监视器(注意:EnumDisplaySettings
套dmLogPixels
我认为这是DPI为0,如果我这样做EnumDisplaySettings
与ENUM_REGISTRY_SETTINGS
constnat所以我不得不使用ENUM_CURRENT_SETTINGS
)。
我发现的唯一的方法,它返回不同是GetDpiForMonitor
与MONITOR_DPI_TYPE
constnat的MDT_Angular_DPI
或MDT_Raw_DPI
,如果我用MDT_Effective_DPI
它给该主监视器的。
所以现在这是我跑GetDpiForMonitor
的结果:
由主要分为二级值都不是给我一个比例系数1.5。无论如何要得到这个比例因子?
感谢
https://msdn.microsoft.com/en-us/library/windows/desktop/dn384110%28v=vs.85%29.aspx –
谢谢@HansPassant! – Noitidart
@HansPassant我使用'EnumDisplaySettings'的方式很酷,如果DPI被设置为默认。如果用户转到面板并且“使文本变大”,它将无法正常工作。所以我想用你的'LogicalToPhysicalPointForPerMonitorDPI'函数,但是因为它需要'hwnd'到一个窗口。有没有一种方法可以将它传递给显示器的“hmon”? – Noitidart