動態設置Edit控件的背景及字體顏色

 

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的值並重繪控件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章