Condividi tramite


CWnd::OnCtlColor

Il framework chiama la funzione membro quando un controllo figlio sta per essere disegnato.

afx_msg HBRUSH OnCtlColor( 
   CDC* pDC, 
   CWnd* pWnd, 
   UINT nCtlColor  
);

Parametri

  • pDC
    Contiene un puntatore al contesto di visualizzazione della finestra figlio. Possono essere temporanei.

  • pWnd
    Contiene un puntatore al controllo che richiede il colore. Possono essere temporanei.

  • nCtlColor
    Contiene uno dei seguenti valori, specificando il tipo di controllo:

    • Pulsante diCTLCOLOR_BTN

    • Finestra di dialogo diCTLCOLOR_DLG

    • Controllo di modifica diCTLCOLOR_EDIT

    • Controllo casella di riepilogo diCTLCOLOR_LISTBOX

    • Finestra di messaggio diCTLCOLOR_MSGBOX

    • Controllo barra di scorrimento diCTLCOLOR_SCROLLBAR

    • Controllo statico diCTLCOLOR_STATIC

Valore restituito

OnCtlColor deve restituire un handle al pennello che deve essere utilizzato per il disegno del controllo in background.

Note

La maggior parte dei controlli invia il messaggio al relativo padre (in genere una finestra di dialogo per preparare pDC per disegnare il controllo utilizzando i colori corretti.

Per modificare il colore del testo, chiamare la funzione membro SetTextColor con i valori rosso, verde e blu desiderati (RGB).

Per modificare il colore di sfondo di un controllo di modifica a riga singola, impostare il manico di spazzola sia impostata nel messaggio CTLCOLOR_MSGBOXCTLCOLOR_EDIT e chiamare la funzione CDC::SetBkColor in risposta al codice CTLCOLOR_EDIT.

OnCtlColor non verrà chiamato dalla casella di riepilogo di una casella combinata a discesa nell'elenco a discesa in realtà è un elemento figlio della casella combinata e non un elemento figlio della finestra. Per modificare il colore dell'elenco a discesa, creare CComboBox con un override OnCtlColor che controllano la presenza CTLCOLOR_LISTBOX nel parametro nCtlColor. In questo gestore, la funzione membro SetBkColor deve essere utilizzata per impostare il colore di sfondo del testo.

Nota

Questa funzione membro viene chiamata dal framework per consentire l'applicazione per gestire un messaggio di Windows.I parametri passati alla funzione riflettono i parametri ricevuti dal framework quando il messaggio è stato ricevuto.Se si chiama l'implementazione della classe base di questa funzione, tale implementazione dei parametri passati originariamente con il messaggio e non i parametri forniti alla funzione.Per aggiungere il seguente metodo alla classe della finestra di dialogo, utilizzare il riquadro proprietà di Visual Studio per aggiungere un gestore messaggi per WM_CTLCOLOR.In alternativa, è possibile aggiungere manualmente una voce di ON_WM_CTLCOLOR () alla mappa messaggi.

Esempio

// This OnCtlColor handler will change the color of a static control 
// with the ID of IDC_MYSTATIC. The code assumes that the CPenWidthsDlg 
// class has an initialized and created CBrush member named m_brush. 
// The control will be painted with red text and a background 
// color of m_brush.
HBRUSH CPenWidthsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   // Call the base class implementation first! Otherwise, it may 
   // undo what we're trying to accomplish here.
   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

   // Are we painting the IDC_MYSTATIC control? We can use 
   // CWnd::GetDlgCtrlID() to perform the most efficient test. 
   if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)
   {
      // Set the text color to red
      pDC->SetTextColor(RGB(255, 0, 0));

      // Set the background mode for text to transparent  
      // so background will show thru.
      pDC->SetBkMode(TRANSPARENT);

      // Return handle to our CBrush object
      hbr = m_brush;
   }

   return hbr;
}

Requisiti

Header: afxwin.h

Vedere anche

Riferimenti

Classe CWnd

Grafico delle gerarchie

CDC::SetBkColor