正文

VC设置Button的字体颜色2010-04-01 14:30:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/miaowei/50866.html

分享到:

    相信大家在用VC做UI的时候,肯定是要用Button的,并且很多时候想要改变Button中显示的字体,颜色,以及大小等。如果这个都没有遇到过,那么说明你根本就没用过VC,那么下面的文章也就不用接着看了。

尝试方法1:

CButton类是继承自CWnd类,而CWnd类有一个SetFont() 函数,所以对话框的程序可以用GetDlgItem(ID)->SetFont(CFont *font)来设置该对话框的字体。

结果,当我改变font的字体时,结果不起作用。

 

尝试方法2:

 查询MSDN以及CSDN,发现原来在VC中上述方法是不能改变字体和颜色等属性的。而CSDN中提到的一种改变对话框属性中字体的方法,这种方法只能改变显示在对话框控件的大小和字体大小。而不能改变将要显示在对话框控件中的字体大小或者颜色。

所以,这种方法只能从CButton类中继承下来,生成自己的Button类。然后重写设置字体和颜色等函数。

//  .h 文件

class CBitButtonNL : public CButton
{

virtual CBitButtonNL& SetFont(LOGFONT lf, BOOL bRepaint = TRUE);

virtual CBitButtonNL& SetFontSize(int nSize, BOOL bRepaint = TRUE);

virtual CBitButtonNL& SetFontItalic(BOOL bSet, BOOL bRepaint = TRUE);

}

// .c 文件

CBitButtonNL& CBitButtonNL::SetFontItalic(BOOL bSet, BOOL bRepaint)
{
 m_lf.lfItalic = bSet;
 ReconstructFont();

 if (bRepaint) Invalidate();

 return *this; 
}

CBitButtonNL& CBitButtonNL::SetFontSize(int nSize, BOOL bRepaint)
{
 CFont cf;
 LOGFONT lf;

 cf.CreatePointFont(nSize * 10, m_lf.lfFaceName);
 cf.GetLogFont(&lf);

 m_lf.lfHeight = lf.lfHeight;
 m_lf.lfWidth  = lf.lfWidth;

// nSize*=-1;
// m_lf.lfHeight = nSize;
 ReconstructFont();

 if (bRepaint) Invalidate();

 return *this;
}

CBitButtonNL& CBitButtonNL::SetFont(LOGFONT lf, BOOL bRepaint)
{
 CopyMemory(&m_lf, &lf, sizeof(m_lf));

 ReconstructFont();

 if (bRepaint) Invalidate();

 return *this;
}

一种更加简单方法:                                                                                                       

直接向这个控件发送消息。

   ::SendMessage( hWnd, WM_SETFONT,  \
     (WPARAM)m_fonts ,0 );

其中,hWnd 类型是HWND,m_fonts为CFont类型。

阅读(14391) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册