Ò»¡£OnInitDialogÀï»ñÈ¡µ±Ç°DPI
²Î¿¼´úÂ룺
int nScale = CDpiHelper::getScale(m_hWnd);
nScale = NormalizeScale(nScale);
if (nScale > 100)
{
SDispatchMessage(UM_SETSCALE, nScale, 0);
CRect rcWnd = GetWindowRect();
int nNewWid = rcWnd.Width() * nScale / 100;
int nNewHei = rcWnd.Height() * nScale / 100;
SetWindowPos(0, 0, 0, nNewWid, nNewHei, SWP_NOZORDER | SWP_NOMOVE);
}
NormalizeScaleΪ±ê×¼»¯dpi£¬ÒòΪ¿ÉÄÜÓÐÓû§×Ô¶¨ÒåµÄÇé¿ö£¬¶øsouiÄÚ²¿Ò²»á±ê×¼»¯dpi£¬Èç¹û²»±ê×¼»¯ÀÉì»á²»Ò»Ö¡£
const int KBuiltinScales[] =
{
100,125,150,175,200//,250,300
};
/*±ê×¼»¯·Å´ó±ÈÀý, Ñ¡Ôñ±È×Ô¼ºÖ¸¶¨±ÈÀýСһºÅµÄ±ÈÀý*/
int NormalizeScale(int nScale)
{
for (int i = 1; i < ARRAYSIZE(KBuiltinScales); i++)
{
if (nScale < KBuiltinScales[i])
{
return KBuiltinScales[i - 1];
}
}
return KBuiltinScales[ARRAYSIZE(KBuiltinScales) - 1];
}
±ê×¼»¯º¯Êý¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄÒªÇóÀ´×ö£¬ÈçÖ»Ö§³Ö100¡£150¡£200¡£
2¡£´¦ÀíWM_DPICHANGEDÏûÏ¢¶¯Ì¬¸Ä±äDPI¡£
²Î¿¼´úÂ룺
void CMainDlg::OnDipChanged(WORD dpi, const RECT * desRect)
{
int nScale = dpi * 100 / 96;
nScale = NormalizeScale(nScale);
SDispatchMessage(UM_SETSCALE, nScale, 0);
SetWindowPos(
NULL,
desRect->left,
desRect->top,
desRect->right - desRect->left,
desRect->bottom - desRect->top,
SWP_NOZORDER | SWP_NOACTIVATE);
}
3¡£ÉèÖÃVSµÄÇåµ¥£ºÏîÄ¿ÓÒ»÷-¡·ÊôÐÔ-¡·ÅäÖÃÊôÐÔ-¡·Çåµ¥¹¤¾ß-¡·ÊäÈëºÍÊä³ö-¡·ÓÒ±ßÑ¡ÔñDPIʶ±ð¹¦ÄÜ£ºÑ¡Ôñÿ¸ö¼àÊÓÆ÷¸ßDPIʶ±ð¡£
4¡£²Î¿¼demoµÄ¶àÓïÑÔµÄdpi,Ìí¼Ó²»Í¬°æ±¾µÄ×ÊÔ´¡£