virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
Параметры
lpDrawItemStruct
Длинный указатель на структуру DRAWITEMSTRUCT, которая содержит информацию относительно типа требуемого рисунка.
Замечания
Вызванный рамкой, когда визуальный аспект изменился. ItemAction и itemState элементы структуры DRAWITEMSTRUCT определяют действие рисунка, которое должно выполниться.
По умолчанию, эта функция не делает ничего. Перегрузите эту функцию, чтобы выполнить рисунок для владельца - выводящегося объекта CListBox. Прикладная программа должна восстановить все графические объекты (GDI) интерфейса устройства, выбранные для контекста дисплея, обеспеченного в lpDrawItemStruct прежде, чем эта функция завершается.
См. CWnd::OnDrawItem для описания структуры DRAWITEMSTRUCT.
Пример
// CMyListBox - мой выведенный владельцем список, полученный из CMyListBox. Это // Пример выводит текст элемента, центрированный вертикально и горизонтально. // Управление списка было создано со следующим кодом: // pmyListBox->Create( // WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL| // LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE, // myRect, pParentWnd, 1); // void CMyListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { ASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX); LPCTSTR lpszText = (LPCTSTR) lpDrawItemStruct->itemData; ASSERT(lpszText != NULL); CDC dc; dc.Attach(lpDrawItemStruct->hDC); // Сохраните это значение, чтобы восстановить их при выполнено рисунок. COLORREF crOldTextColor = dc.GetTextColor(); COLORREF crOldBkColor = dc.GetBkColor(); // Если этот элемент выбран, установите фоновый цвет // И текстовый цвет, чтобы приспособить значения. Также, стирание // Rect, заполняя это с фоновым цветом. 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); // Если этот элемент имеет центр, выведите красную рамку вокруг // Rect элемента. if ((lpDrawItemStruct->itemAction | ODA_FOCUS) && (lpDrawItemStruct->itemState & ODS_FOCUS)) { CBrush br(RGB(255, 0, 0)); dc.FrameRect(&lpDrawItemStruct->rcItem, &br); } // Нарисовать текст dc.DrawText( lpszText, strlen(lpszText), &lpDrawItemStruct->rcItem, DT_CENTER|DT_SINGLELINE|DT_VCENTER); // Сбросить фоновый цвет и цвет текста обратно к их // первоначальным значениям. dc.SetTextColor(crOldTextColor); dc.SetBkColor(crOldBkColor); dc.Detach(); }