win32获取屏幕缩放比例

原理就是获取 实际 设置的分辨率 / 当时显示的分辨率

设置屏幕缩放后,调用常规的方式获取桌面大小,都是缩放后的尺寸,而非实际设置的尺寸。

这里可以用EnumDisplaySettings函数来获取实际设置的分辨率大小。

 1 #include <iostream>
 2 #include<Windows.h>
 3 
 4 HMONITOR GetPrimaryMonitor()
 5 {
 6     POINT ptZero = { 0, 0 };
 7     return MonitorFromPoint(ptZero,
 8         MONITOR_DEFAULTTOPRIMARY);
 9 }
10 
11 float GetMonitorScalingRatio(HMONITOR monitor)
12 {
13     MONITORINFOEX info ={ };
14     info.cbSize = sizeof(info);
15     GetMonitorInfo(monitor, &info);
16     DEVMODE devmode = {};
17     devmode.dmSize = sizeof(DEVMODE);
18     EnumDisplaySettings(info.szDevice, ENUM_CURRENT_SETTINGS, &devmode);
19     return static_cast<float>(devmode.dmPelsWidth) / (info.rcMonitor.right - info.rcMonitor.left);
20 }
21 
22 int main()
23 {
24     auto h = GetPrimaryMonitor();
25     float s = GetMonitorScalingRatio(h);
26     std::cout << s << std::endl;
27 }

 

 

 

运行结果 :

 

 

 

 运行结果 :

 

posted @ 2023-04-07 15:43  zhaotianff  阅读(534)  评论(0编辑  收藏  举报