目前高分辨率的显示器越来越高,我们不得不让程序适配系统的HDPI,
其中需要知道系统当前的缩放倍率。
可以使用一下函数获取:
double GetDeviceDpiFactor()
{
double dDpi = 1;
// Get desktop dc
HDC desktopDc = ::GetDC(NULL);
// Get native resolution
float horizontalDPI = ::GetDeviceCaps(desktopDc, LOGPIXELSX);
float verticalDPI = ::GetDeviceCaps(desktopDc, LOGPIXELSY);
int dpi = (horizontalDPI + verticalDPI) / 2;
dDpi = 1 + ((dpi - 96) / 24)*0.25;
if (dDpi < 1)
{
dDpi = 1;
}
::ReleaseDC(NULL, desktopDc);
return dDpi;
}
为了能让程序顺利的通过GetDeviceCaps这个函数得到缩放倍率,我们需要在VS项目的
"properties->manifest tool->input and output"中将"enable dpi awareness" 设置为"yes".
或者是在程序中调用::SetProcessDpiAwareness函数(官方并不推荐这样做,这样会导致一些不可预测的问题).
根据如上的操作进行就能顺利的得到当前桌面的缩放倍率。