m_Font.CreateFont( 15, 0, 0, 0, 100, FALSE, FALSE, 0,
GB2312_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_MODERN, "华文新魏" ) ; SetFont(&m_Font);
m_Font做为类成员变量声明
GB2312_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_MODERN, "华文新魏" ) ; SetFont(&m_Font);
m_Font做为类成员变量声明
if(FontDialog.DoModal()!=IDOK)
return;
m_CurrentFontColor=FontDialog.GetColor();
m_CurrentFont.DeleteObject();
m_CurrentFont.CreateFontIndirect(&FontDialog.m_lf);我以前是这么做的
问题的提出
要改变对话框控制中文的字体及大小,可以采用多种方式,在基于资源模板的对话框中改变控件的字体更是一件很容易的事。点击对话框资源模板的属性页中的“字体”按钮,选择所需的字体即可改变对话框控制中文本的字体及大小,可是这种方法并非在任何时候都奏效。 比如,我在程序中以插入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 )) ;
不如直接设控件的字体
把字体变大
LOGFONT logfont;
CFont *pfont = m_ctrShowMessage.GetFont();
pfont->GetLogFont( &logfont );
logfont.lfHeight =logfont.lfHeight * 1.5;
logfont.lfWidth = logfont.lfWidth * 1.5;
CFont font;
font.CreateFontIndirect(&logfont);
m_ctrShowMessage.SetFont(&font);
但创建之后,不可能设置一下对话框的字体就希望各控件的字体也跟着改变,需要自己显式地设定。还好也不麻烦,加上几句话就行了。m_Font.CreateFont( 15, 0, 0, 0, 100, FALSE, FALSE, 0,
GB2312_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_MODERN, "华文新魏" ) ; CWnd *pWndChild;
pWndChild = GetWindow(GW_CHILD);
while(pWndChild)
{
pWndChild->SetFont(&m_Font);
pWndChild = pWndChild->GetWindow(GW_HWNDNEXT);
}SetFont(&m_Font);
Invalidate();
UpdateWindow();
但创建之后,不可能设置一下对话框的字体就希望各控件的字体也跟着改变,需要自己显式地设定。还好也不麻烦,加上几句话就行了。m_Font.CreateFont( 15, 0, 0, 0, 100, FALSE, FALSE, 0,
GB2312_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_MODERN, "华文新魏" ) ; CWnd *pWndChild;
pWndChild = GetWindow(GW_CHILD);
while(pWndChild)
{
pWndChild->SetFont(&m_Font);
pWndChild = pWndChild->GetWindow(GW_HWNDNEXT);
}SetFont(&m_Font);
Invalidate();
UpdateWindow();