在實際的應用中,可以用WM_CTLCOLOR 消息改變mfc中控件的顏色,比如現在就來改變一個static text的背景色和字體:
1. 在對話框的類中添加兩個變量:
CBrush m_brush;
CFont m_font;
在OnInitDialog()函數中添加:
// TODO: 在此添加額外的初始化代碼
m_font.CreatePointFont(150,"華文行楷");
m_brush.CreateSolidBrush(#00ff00);
2. 添加WM_CTLCOLOR 消息響應,添加的方法為:
在對話框類中聲明:afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) ;
在消息映射中添加: ON_WM_CTLCOLOR()
如:
BEGIN_MESSAGE_MAP(CtestEnvDlg, CDialog)
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3. 添加響應函數:
HBRUSH CYourDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(m_yourStatic.m_hWnd == pWnd->m_hWnd)
{
pDC->SetBkColor(#00ff00);
//pDC->SetTextColor(#ff0000);//文字色
pDC->SelectObject(&m_font);
return m_brush;
}
return hbr;
} HBRUSH CJuanZongAJAddCriminal::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何屬性
if (pWnd->GetDlgCtrlID() == IDC_STATIC)
{
//pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(#dedede);
pDC->SetBkColor(#383838);
hbr = CreateSolidBrush(#383838);
}
if (nCtlColor == CTLCOLOR_EDIT)
{
pDC->SetTextColor(#dedede);
pDC->SetBkColor(#14344d);
hbr = CreateSolidBrush(#14344d);
}
// TODO: 如果默認的不是所需畫筆,則返回另一個畫筆
return hbr;
}
這樣就可以改變static text的顏色和字體了