在测试一个windows项目时,突然发现GetWindowRect、GetClientRect的结果不对。
环境:win10,桌面文本、应用比例选择为放大125%,开发工具vs2019
结果:
1、在mfc对话框工程中,结果正确 (对应于缩放比例做了处理)
2、在windowproject工程和控制台工程中,结果不正确(对应于缩放比例没处理,以正常的dpi显示)
3、相关的api参考:GetDeviceCaps、GetDpiForWindow 、GetSystemDpiForProcess 、SetSystemDpiForProcess GetDpiForSystem 、GetDpiForMonitor 、DwmGetWindowAttribute、
SetProcessDpiAwareness
4、最后确定SetProcessDpiAwareness 为正确的。
SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE);
1 2 3 | HRESULT WINAPI SetProcessDpiAwareness( _In_ PROCESS_DPI_AWARENESS value ); |
传入的参数有三个取值选择:
1 2 3 4 5 | typedef enum _PROCESS_DPI_AWARENESS { PROCESS_DPI_UNAWARE = 0, PROCESS_SYSTEM_DPI_AWARE = 1, PROCESS_PER_MONITOR_DPI_AWARE = 2 } PROCESS_DPI_AWARENESS; |