1.新建一個基於對話框的應用程序,在對話框上添加一個Edit控件和三個Radio控件
2.修改Radio控件的ID分別爲:IDC_RAD_RED、IDC_RAD_GREED、IDC_RAD_BLUE,名稱對應修改爲red、green、blue
3.向對話框對應的類中添加如下成員變量:
public:
COLORREF m_colorEditText; // edit控件的字體顏色
COLORREF m_colorEditBK; // edit控件的背景顏色
CBrush* m_pEditBkBrush;
並在構造函數中初始化:
CColorEditDlgDlg::CColorEditDlgDlg(CWnd* pParent )
: CDialog(CColorEditDlgDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CColorEditDlgDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_colorEditText = RGB(255,255,255);
m_colorEditBK = RGB(0,0,0);
m_pEditBkBrush = new CBrush(RGB(0,0,0));
}
4.向對話框添加WM_CTLCOLOR和WM_DESTORY消息的響應函數如下:
HBRUSH CColorEditDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
switch (nCtlColor) {
case CTLCOLOR_EDIT:
case CTLCOLOR_MSGBOX:
// Set color to green on black and return the background brush.
pDC->SetTextColor(m_colorEditText);
pDC->SetBkColor(m_colorEditBK);
return (HBRUSH)(m_pEditBkBrush->GetSafeHandle());
default:
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
}
void CColorEditDlgDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
delete m_pEditBkBrush;
}
5.分別向三個Radio控件添加BN_CLICKED消息響應函數如下:
void CColorEditDlgDlg::OnRadRed()
{
// TODO: Add your control notification handler code here
m_colorEditText = RGB(255,0,0);
// redraw edit control
((CEdit *)GetDlgItem(IDC_EDIT1))->SetRedraw(TRUE);
// invalidate the entire control, force painting
((CEdit *)GetDlgItem(IDC_EDIT1))->Invalidate();
((CEdit *)GetDlgItem(IDC_EDIT1))->UpdateWindow();
}
void CColorEditDlgDlg::OnRadBlue()
{
// TODO: Add your control notification handler code here
m_colorEditText = RGB(0,0,255);
// redraw edit control
((CEdit *)GetDlgItem(IDC_EDIT1))->SetRedraw(TRUE);
// invalidate the entire control, force painting
((CEdit *)GetDlgItem(IDC_EDIT1))->Invalidate();
((CEdit *)GetDlgItem(IDC_EDIT1))->UpdateWindow();
}
void CColorEditDlgDlg::OnRadGreen()
{
// TODO: Add your control notification handler code here
m_colorEditText = RGB(0,255,0);
// redraw edit control
((CEdit *)GetDlgItem(IDC_EDIT1))->SetRedraw(TRUE);
// invalidate the entire control, force painting
((CEdit *)GetDlgItem(IDC_EDIT1))->Invalidate();
((CEdit *)GetDlgItem(IDC_EDIT1))->UpdateWindow();
}
完成後運行程序,點擊Radio控件可以動態改變編輯框中字體的顏色,如果想改變edit框背景的顏色,可以修改成員變量m_colorEditBK的值並重繪控件。