Шаг 948 - CListBox::DrawItem

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

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 12.02.2002