我遇到了一個問題,因爲我正在編碼一個不支持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