1、改变缩放后需要重启系统
// 获取窗口当前显示的监视器
HWND hWndScreen = GetDesktopWindow();
HMONITOR hMonScreen = MonitorFromWindow(hWndScreen, MONITOR_DEFAULTTONEAREST);
//获取监视器的逻辑宽度
MONITORINFOEX monitorInfoex;
monitorInfoex.cbSize = sizeof(monitorInfoex);
GetMonitorInfo(hMonScreen, &monitorInfoex);
//获取监视器的物理宽度
DEVMODE devMode;
devMode.dmSize = sizeof(devMode);
devMode.dmDriverExtra = 0;
EnumDisplaySettings(monitorInfoex.szDevice, ENUM_CURRENT_SETTINGS, &devMode);
float fRes = devMode.dmLogPixels / 96.0;
//返回缩放比
return fRes;
2、改变缩放后不需要重启系统
// 获取窗口当前显示的监视器
HWND hWnd = GetDesktopWindow();//根据需要可以替换成自己程序的句柄
HMONITOR hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
// 获取监视器逻辑宽度与高度
MONITORINFOEX miex;
miex.cbSize = sizeof(miex);
GetMonitorInfo(hMonitor, &miex);
int cxLogical = (miex.rcMonitor.right - miex.rcMonitor.left);
int cyLogical = (miex.rcMonitor.bottom - miex.rcMonitor.top);
// 获取监视器物理宽度与高度
DEVMODE dm;
dm.dmSize = sizeof(dm);
dm.dmDriverExtra = 0;
EnumDisplaySettings(miex.szDevice, ENUM_CURRENT_SETTINGS, &dm);
int cxPhysical = dm.dmPelsWidth;
int cyPhysical = dm.dmPelsHeight;
//缩放比例计算
double horzScale = ((double)cxPhysical / (double)cxLogical);
double vertScale = ((double)cyPhysical / (double)cyLogical);
//返回缩放比
return horzScale;