2008-10-20 55 views
4

夥計們,有人能給我一個短暫的運行如何改變在運行時的CEdit控件的背景顏色?如果字段長度爲零,我希望能夠將背景更改爲紅色,否則將正常白色更改爲紅色。MFC:改變CEdit的顏色

回答

6

你不能用普通的CEdit來做,你需要重寫一些比特。

實現自己ON_WM_CTLCOLOR_REFLECT處理程序,然後在處理程序返回的彩色CBrush:

(大概,你需要把通常的資源管理在那裏,rememebr刪除你的畫筆在析構函數)

class CColorEdit : public CEdit 
{ 
    .... 
    CBrush m_brBkgnd; 
    afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor) 
    { 
    m_brBkgnd.DeleteObject(); 
    m_brBkgnd.CreateSolidBrush(nCtlColor); 
    } 
} 
3

這也可以從沒有獲得的CEdit做:

  1. 添加ON_WM_CTLCOLOR()到你的對話框的BEGIN_MESSAGE_MAP()代碼塊。
  2. 添加OnCltColor()到對話框類:

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); 
    
  3. 像這樣實現OnCtlColor()

    HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    { 
        if ((CTLCOLOR_EDIT == nCtlColor) && 
         (IDC_MY_EDIT == pWnd->GetDlgCtrlID())) 
        { 
         return m_brMyEditBk; //Create this brush in OnInitDialog() and destroy in destructor 
        } 
        return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
    }