在应用VC++进行程序设计时,为了使界面美观,往往需要改变对话框控件中文本的字体及大小。
问题的提出
要改变对话框控制中文的字体及大小,可以采用多种方式,在基于资源模板的对话框中改变控件的字体更是一件很容易的事。点击对话框资源模板的属性页中的“字体”按钮,选择所需的字体即可改变对话框控制中文本的字体及大小,可是这种方法并非在任何时候都奏效。
比如,我在程序中以插入ActiveX控件的方式做一个多页对话框时,AppWizard自动为每一页生成一个对话框资源模板,我在资源模板中建立一个静态文本控制并写上汉字,然后应用上述方法改变字体后,运行程序发现属性页中的文字并没有变为我所设置的字体,依然按系统默认的字体显示。
解题思路
用在程序中创建自定义字体,并重载OnSetFont()函数的方法无法改变字体及大小(后经过跟踪调试才发现,原来基类的OnSetFont()函数体是空的)。于是我想到用发送WM—SetFont消息的方法改变字体,终于大功告成!
程序代码
在对话框的类中增加两个public型变量:
public:
Logfont lf;
CFont font;
在OnInitDialog()函数中插入相关代码。
lf.lfHeight=25; //字体高度
lf.lfWidth=20; //字体宽度
lf.lfEscapement=0;
lf.lfOrientation=0;
lf.lfWeight=400;
lf.lfItalic=false;
lf.lfUnderline=false;
lf.lfCharSet=Default_Charset;
lf.lfStrikeOut=False;
lf.lfOutPrecision=Out_Default_Precis;
lf.lfClipPrecision=Clip_Default_Precis;
lf.lfQuality=Default_Quality ;
lf.lfPitchAndFamily=Default_Pitch;
strcpy( lf.lfFaceName,″ ″);
font.CreateFontIndirect(&lf);
SendMessageToDescendants
(WM_SetFont,(WPapam)HFont (font ),
Makelparam ( True ,0 )) ;