Partager via


CWnd::OnCtlColor

L'infrastructure appelle cette fonction membre lorsqu'un contrôle enfant est sur le point d'être dessiné.

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

Paramètres

  • pDC
    Contient un pointeur vers le contexte d'affichage de la fenêtre enfant.Peut être temporaire.

  • pWnd
    Contient un pointeur vers le contrôle qui demande la couleur.Peut être temporaire.

  • nCtlColor
    Contient une des valeurs suivantes, en spécifiant le type de contrôle :

    • Contrôle bouton deCTLCOLOR_BTN

    • Boîte de dialogue deCTLCOLOR_DLG

    • Contrôle d'édition deCTLCOLOR_EDIT

    • Contrôle zone de liste déroulante deCTLCOLOR_LISTBOX

    • Message deCTLCOLOR_MSGBOX

    • Contrôle de barre de défilement deCTLCOLOR_SCROLLBAR

    • Contrôle statique deCTLCOLOR_STATIC

Valeur de retour

OnCtlColor doit retourner un handle au pinceau qui doit être utilisé pour peindre l'arrière-plan du contrôle.

Notes

La plupart des contrôles envoient ce message à leur parent (généralement une boîte de dialogue) pour préparer pDC pour dessiner le contrôle à l'aide de les couleurs correctes.

Pour modifier la couleur de texte, appelez la fonction membre d' SetTextColor avec le souhaité rouge, vert, et les valeurs (RVB) bleues.

Pour modifier la couleur d'arrière-plan d'un contrôle d'édition sur une ligne, définir le handle du pinceau codes dans de CTLCOLOR_EDIT et de CTLCOLOR_MSGBOX message, puis appeler la fonction de CDC::SetBkColor en réponse à le code de CTLCOLOR_EDIT .

OnCtlColor ne sera pas appelé pour la zone de liste d'une zone de liste déroulante modifiable car la zone de liste déroulante est en réalité un enfant de la zone de liste déroulante et pas un enfant de la fenêtre.Pour modifier la couleur de la zone de liste déroulante, créez CComboBox avec une substitution d' OnCtlColor qui vérifie CTLCOLOR_LISTBOX dans le paramètre d' nCtlColor .Dans ce gestionnaire, la fonction membre d' SetBkColor doit être utilisée pour définir la couleur d'arrière-plan du texte.

[!REMARQUE]

Cette fonction membre est appelée par l'infrastructure pour permettre à votre application de gérer un message de fenêtre.Les paramètres sont passés à la fonction reflètent les paramètres acceptés par l'infrastructure lorsque le message a été accepté.Si vous appelez l'implémentation de la classe de base de cette fonction, cette implémentation utilise les paramètres initialement passés avec le message et non les paramètres que vous fournissez à la fonction.Pour ajouter la méthode suivante à votre classe de boîte de dialogue, utilisez le volet de propriétés de Visual Studio pour ajouter un gestionnaire de messages pour WM_CTLCOLOR.Sinon, vous pouvez ajouter manuellement une entrée d'ON_WM_ CTLCOLOR() dans la table des messages.

Exemple

// 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;
}

Configuration requise

Header: afxwin.h

Voir aussi

Référence

CWnd, classe

Graphique de la hiérarchie

CDC::SetBkColor