Frage

Leute, kann mir jemand einen kurzen Lauf geben durch, wie die Hintergrundfarbe einer CEdit Steuerung zur Laufzeit ändern? Ich möchte den Hintergrund rot ändern können, wenn das Feld der Länge Null ist und die normale weiße sonst.

War es hilfreich?

Lösung

Sie können es mit einem einfachen CEdit nicht tun, müssen Sie ein paar Bits außer Kraft zu setzen.

Implementieren Sie Ihren eigenen ON_WM_CTLCOLOR_REFLECT Handler, dann wieder Ihre farbige CBrush im Handler:

(grob, werden Sie das übliche Ressourcenmanagement in dort setzen müssen, rememebr Pinsel im Destruktor löschen)

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

Andere Tipps

Dies kann auch ohne Ableitung von CEdit erfolgen:

  1. Fügen Sie ON_WM_CTLCOLOR() zu Ihrem Dialog des BEGIN_MESSAGE_MAP() Codeblock.
  2. In OnCltColor() auf Ihre Dialogklasse:

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    
  3. Implement OnCtlColor() etwa so:

    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);
    }
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top