使用如下方法来获得当前缩放系数:
float GetDPIFactor()
{
static float s_fDPI = -1;
if (s_fDPI < 0)
{
HDC hDC = ::GetDC(NULL);
s_fDPI = (float)GetDeviceCaps(hDC, LOGPIXELSX) / 96.0);
::ReleaseDC(NULL, hDC);
}
return s_nDPI;
}
#define MultiPlyDPI(nLen) (int((nVol)*GetDPIFactor()))
对话框使用对话框字号来决定控件之间的布局,它们通常不需要进行特殊修改,就能在高DPI设备上工作。对话框本身的宽高,如果不手动设置的话,是会随着DPI缩放而缩放,一旦有手动设置,就不能简单写个数字,而是要乘以DPI缩放系数,保证在不同DPI下显示效果的一致。
控件缩放分为自身缩放以及相对位置缩放。
在创建字体时,推荐使用磅来指定字号,磅是逻辑大小,而不是像素高度,创建方法如下:
LOGFONT lf;
memset(&lf, 0, sizeof(lf));
lf.lfHeight = -(iPointSize * GetDeviceCaps(hdc, LOGPIXELSY)) / 72;
HFONT font = CreateFontIndirect(&lf);
原文:https://www.cnblogs.com/cherishui/p/13209798.html