2015-07-20 73 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

回答