使用soui开发的mbc,只支持windows版本
编辑 | blame | 历史 | 原始文档
Ò»¡£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,Ìí¼Ó²»Í¬°æ±¾µÄ×ÊÔ´¡£