Domanda

Ragazzi, qualcuno può darmi una breve panoramica su come cambiare il colore di sfondo di un controllo CEdit in fase di esecuzione? Voglio essere in grado di cambiare lo sfondo in rosso se il campo ha lunghezza zero e il bianco normale altrimenti.

È stato utile?

Soluzione

Non puoi farlo con un semplice CEdit, devi sovrascrivere alcuni bit.

Implementa il tuo gestore ON_WM_CTLCOLOR_REFLECT, quindi restituisci il tuo CBrush colorato nel gestore:

(approssimativamente, dovrai inserire la solita gestione delle risorse, ricorda di eliminare il pennello nel distruttore)

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

Altri suggerimenti

Questo può essere fatto anche senza derivare da CEdit:

  1. Aggiungi ON_WM_CTLCOLOR () al blocco di codice BEGIN_MESSAGE_MAP () della tua finestra di dialogo.
  2. Aggiungi OnCltColor () alla tua classe di dialogo:

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    
  3. Implementa OnCtlColor () in questo modo:

    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);
    }
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top