Win8.1 和 Win10 开始,写win32界面程序就需要考虑dpi了,不同的DPI Awareness Mode下,windows 的部分api返回的结果不同,调用GetSystemMetrics(SM_CXSCREEN) 和 GetSystemMetrics(SM_CYSCREEN) 返回的结果都是被dpi矫正过的,可以用使用EnumDisplaySettingsEx获取屏幕宽高。代码如下:
DEVMODE dev_mode;
dev_mode.dmSize = sizeof(dev_mode);
dev_mode.dmDriverExtra = 0;
if (EnumDisplaySettingsEx(device_name, ENUM_CURRENT_SETTINGS, &dev_mode, 0))
{
auto s_w = dev_mode.dmPelsWidth; // 屏幕宽
auto s_h = dev_mode.dmPelsHeight; // 屏幕高
std::ostringstream os;
os << "screen size:" << s_w << "*" << "s_h" << "\r\n";
OutputDebugStringA(os.str().c_str());
}
更多问题可以联系qq: 1130758427, qq群: 182979815 294891451. github