改变对话框控件的字体

发表于:2007-07-04来源:作者:点击数: 标签:
李玉存 在应用VC++进行程序设计时,为了使界面美观,往往需要改变对话框控件中文本的字体及大
李玉存

  在应用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 )) ;  

原文转自:http://www.ltesting.net