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