2008-10-20 11 views
4

Les gars, quelqu'un peut-il me donner un bref aperçu de la façon de changer la couleur d'arrière-plan d'un contrôle CEdit à l'exécution? Je veux être en mesure de changer l'arrière-plan en rouge si le champ est de longueur nulle et le blanc normal sinon.MFC: Modification de la couleur de CEdit

Répondre

6

Vous ne pouvez pas le faire avec un simple CEdit, vous devez remplacer quelques bits.

implémenter votre propre gestionnaire de ON_WM_CTLCOLOR_REFLECT, puis retournez votre couleur CBrush dans le gestionnaire:

(à peu près, vous aurez besoin de mettre la gestion des ressources d'habitude là-bas, rememebr supprimer votre pinceau dans la destructor)

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

Cela peut aussi être fait sans en tirer de CEdit:

  1. Ajouter ON_WM_CTLCOLOR()-BEGIN_MESSAGE_MAP() bloc de code de votre boîte de dialogue.
  2. Ajouter OnCltColor() à votre classe de dialogue:

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); 
    
  3. Mettre en oeuvre OnCtlColor() comme ceci:

    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); 
    } 
    
Questions connexes