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();
}