2015-07-20 72 views
0

我遇到了一个问题,因为我正在编码一个不支持dpi的流程,直到修复了一个bug。在Win81 +不支持dpi的流程中,找出缩放因子

所以现在我需要做一个解决。我的想法是这样的:找出放大因子,并给我的元素宽度/高度缩小那么多。

所以现在我正在绘制一幅全高和第二个监视器的画布,它的编号为1920 x 1080(WxH)。但是有意思的是(通过截图后的photoshop测量),它的出现是2880 x 1620。这是一个放大系数1.5(2880除以1920或1620除以1080)。

我试图让dpi,采用的GetDeviceCapsEnumDisplaysettings方法,但所有的人都返回到主监视器(注意:EnumDisplaySettingsdmLogPixels我认为这是DPI为0,如果我这样做EnumDisplaySettingsENUM_REGISTRY_SETTINGS constnat所以我不得不使用ENUM_CURRENT_SETTINGS)。

我发现的唯一的方法,它返回不同是GetDpiForMonitorMONITOR_DPI_TYPE constnat的MDT_Angular_DPIMDT_Raw_DPI,如果我用MDT_Effective_DPI它给该主监视器的。

所以现在这是我跑GetDpiForMonitor的结果:

由主要分为二级值都不是给我一个比例系数1.5。无论如何要得到这个比例因子?

感谢

+1

https://msdn.microsoft.com/en-us/library/windows/desktop/dn384110%28v=vs.85%29.aspx –

+0

谢谢@HansPassant! – Noitidart

+0

@HansPassant我使用'EnumDisplaySettings'的方式很酷,如果DPI被设置为默认。如果用户转到面板并且“使文本变大”,它将无法正常工作。所以我想用你的'LogicalToPhysicalPointForPerMonitorDPI'函数,但是因为它需要'hwnd'到一个窗口。有没有一种方法可以将它传递给显示器的“hmon”? – Noitidart

回答