本文主要介绍只读模式的下的CEdit控件和CStatic控件的字体的大小和颜色的修改,编辑模式下的CEdit控件的原理是一样的只是消息变了。
1. 修改字体颜色
只读模式下的CEdit控件和CSataic控件通过发送WM_CTLCOLORSTATIC给主窗口来进行重绘,这时主窗口可以在重绘前设定字体颜色(编辑模式的Cedit通过WM_CTLCOLOREDIT )。具体实现如下:
1.1 在主窗口的消息循环中添加如下代码(红色部分):
BEGIN_MSG_MAP(CMainDlg)
.......
MESSAGE_HANDLER(WM_CTLCOLORSTATIC,OnEditColor)
END_MSG_MAP()
1.2 然后添加OnEditColor方法:
LRESULT CMainDlg::OnEditColor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
HBRUSH hbr;
HDC hdc =(HDC) wParam;
HWND hwnd = (HWND) lParam;
//获得当前控件的画刷,因为改变字体颜色后,需要返回自身的画刷才能生效
hbr= (HBRUSH) GetCurrentObject(hdc,OBJ_BRUSH);
if(hwnd == m_fr_status.m_hWnd) //判断是否需要修改的控件
{//如果是,修改字体颜色
SetTextColor(hdc,m_fr_cl);
SetBkMode(hdc,TRANSPARENT);
}else
{//如果不是,返回主窗口默认画刷。
hbr= (HBRUSH) GetCurrentObject(NULL,OBJ_BRUSH);
}
return (LRESULT)hbr;
}
2. 修改字体
在主窗口类里添加一个CFont类的成员函数,因为我们修改后的字体需要保存起来,如果定义为局部变量,在设置完成后,函数返回后,字体就会失效。
class CMainDlg : public CDialogImpl<CMainDlg>
{
private:
......
CFont m_font;
CEdit m_fr_sn;
......
}
在OnInitDialog方法中添加如下红色代码,设置字体:
......
m_fr_sn = (CEdit)GetDlgItem(IDC_EDIT_FR_SN);
m_font.Attach(m_fo_sn.GetFont());
m_font.CreatePointFont(220,_T("微软雅黑"));
m_fr_sn.SetFont(m_font.m_hFont);
.......