前些天优化智勇三国的界面,目标:操作简单,信息明了。有一点体会,与君共享,也欢迎大家指教。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。

 

 

posted on 2020-05-24 09:23  闻缺陷则喜何志丹  阅读(2)  评论(0编辑  收藏  举报  来源