Partager via


CComboBox::DrawItem

Appelé par l'infrastructure lorsqu'un aspect visuel d'une zone de liste déroulante owner-draw change.

virtual void DrawItem(
   LPDRAWITEMSTRUCT lpDrawItemStruct 
);

Paramètres

  • lpDrawItemStruct
    Un pointeur vers une structure de DRAWITEMSTRUCT qui contient des informations sur le type de dessin requis.

Notes

Le membre d' itemAction de la structure d' DRAWITEMSTRUCT définit le dessin qui doit être exécuté.Consultez CWnd::OnDrawItem pour obtenir une description de cette structure.

Par défaut, cette fonction membre ne fait rien.Remplacez cette fonction membre pour implémenter le dessin d'un objet d' CComboBox owner draw.Pour que cette fonction membre se termine, l'application doit restaurer tous les objets de définition de données (GDI) Graphics Device Interface sélectionnés pour le contexte d'affichage fourni dans lpDrawItemStruct.

Exemple

// CMyComboBox is my owner-drawn combo box derived from CComboBox. This 
// example draws an item's text centered vertically and horizontally. The 
// combo box control was created with the following code:
//   pmyComboBox->Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      CBS_SORT|CBS_OWNERDRAWVARIABLE,
//      myRect, pParentWnd, 1);
//
void CMyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
   ASSERT(lpDrawItemStruct->CtlType == ODT_COMBOBOX);
   LPCTSTR lpszText = (LPCTSTR) lpDrawItemStruct->itemData;
   ASSERT(lpszText != NULL);
   CDC dc;

   dc.Attach(lpDrawItemStruct->hDC);

   // Save these value to restore them when done drawing.
   COLORREF crOldTextColor = dc.GetTextColor();
   COLORREF crOldBkColor = dc.GetBkColor();

   // If this item is selected, set the background color 
   // and the text color to appropriate values. Erase
   // the rect by filling it with the background color.
   if ((lpDrawItemStruct->itemAction & ODA_SELECT) &&
      (lpDrawItemStruct->itemState  & ODS_SELECTED))
   {
      dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
      dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
      dc.FillSolidRect(&lpDrawItemStruct->rcItem, ::GetSysColor(COLOR_HIGHLIGHT));
   }
   else
   {
      dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
   }

   // Draw the text.
   dc.DrawText(
      lpszText,
      (int)_tcslen(lpszText),
      &lpDrawItemStruct->rcItem,
      DT_CENTER|DT_SINGLELINE|DT_VCENTER);

   // Reset the background color and the text color back to their
   // original values.
   dc.SetTextColor(crOldTextColor);
   dc.SetBkColor(crOldBkColor);

   dc.Detach();
}

Configuration requise

Header: afxwin.h

Voir aussi

Référence

Classe de CComboBox

Graphique de la hiérarchie

CComboBox::CompareItem

WM_DRAWITEM

CComboBox::MeasureItem

CComboBox::DeleteItem