Question

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 au moment de l'exécution? Je veux pouvoir changer le fond en rouge si le champ a une longueur nulle et le blanc normal sinon.

Était-ce utile?

La solution

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

Implémentez votre propre gestionnaire ON_WM_CTLCOLOR_REFLECT, puis renvoyez votre CBrush coloré dans le gestionnaire:

(en gros, vous devrez y mettre la gestion habituelle des ressources, n'oubliez pas de supprimer votre pinceau dans le destructeur)

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

Autres conseils

Cela peut également être fait sans dériver de CEdit:

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

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    
  3. Implémentez OnCtlColor () comme suit:

    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);
    }
    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top