相信大家在用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类型。

评论