首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC自带资源编辑器的单位,该如何处理

2012-04-22 
VC自带资源编辑器的单位前些天优化智勇三国的界面,目标:操作简单,信息明了。有一点体会,与君共享,也欢迎大

VC自带资源编辑器的单位


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



[解决办法]
MapDialogRect()

C/C++ code
left   = MulDiv(left,   baseunitX, 4);right  = MulDiv(right,  baseunitX, 4);top    = MulDiv(top,    baseunitY, 8);bottom = MulDiv(bottom, baseunitY, 8); 

热点排行