前些天优化智勇三国的界面,目标:操作简单,信息明了。有一点体会,与君共享,也欢迎大家指教。CDC类的函数(如:TextOut)的单位是像素,资源编辑器的单位不是像素,当时没在意。发布后,有少量用户页局混乱。原以为是分辨率的问题,其实是字体的问题。宋体小四DLU单位是2像素,宋体小五DLU单位是1.5像素。DLU的优点是什么呢?在资源编辑器中更改字体,对话框和控件都会改变大小,这样布局不会乱。用户设置成大字体,也不会乱。问题的引伸,如何由用户指定字体,SetFont只改变字体不改变窗口大小。
解决方法如下:
#include   <afxpriv.h> int CSanGuoDlg::DoModal() 
{
CDialogTemplate   dlt; 
int   nResult; 
if   (!dlt.Load(MAKEINTRESOURCE(IDD))) 
return   -1; 
dlt.SetFont( "宋体",   9); 
LPSTR   pdata   =   (LPSTR)GlobalLock(dlt.m_hTemplate); 
m_lpszTemplateName   =   NULL; 
InitModalIndirect(pdata);
nResult   =   CDialog::DoModal(); 
//   unlock   memory   object 
GlobalUnlock(dlt.m_hTemplate); 

return   nResult; 
}知识点一,如何设置大字体。
在windows上点击右键 
点击“属性” 
打开“设置”Tab标签然后点击“高级” 
在“常规”标签, 在字体尺寸框中改变的系统 DPI 
重启系统知识点二:如何求DLU等于多少像素。
DLU的一个X方向的坐标单位相当于对话框中所用字体的平均宽度的1/4,Y方向的坐标单位相当于对话框对话框所用字体高度的1/8。注意字体平均宽度的计算并非是所有字符的平均,而是字母a…z(包括大写)的宽度的平均,换句话说,它等于字符串”a…zA…Z”的长度除以52。