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 }
运行结果 :
运行结果 :