Шаг 592 - CMenu::DrawItem

virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );

lpDrawItemStruct
Указатель на структуру DRAWITEMSTRUCT, которая содержит информацию относительно типа требуемого рисунка.

Замечания
Вызывается рамкой, когда визуальный аспект меню выведенного владельцем изменился. ItemAction член структуры DRAWITEMSTRUCT определяет действие рисунка, которое должно выполниться. Перегрузите эту функцию чтобы выполнить рисунок для владельца выводящегося объект CMenu. Прикладная программа должна восстановить все графические объекты (GDI) интерфейса устройства, выбранные для контекста дисплея, обеспеченного в lpDrawItemStruct перед завершением этой функции.

Пример.

// Перегрузите  DrawItem () чтобы выполнить рисунок для владельца выводящегося объекта CMenu.
// CColorMenu - класс унаследованный от CMenu.
void CColorMenu::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
	CDC* pDC = CDC::FromHandle(lpDIS->hDC);
	COLORREF cr = (COLORREF)lpDIS->itemData; // RGB in item data

	if (lpDIS->itemAction & ODA_DRAWENTIRE)
	{
		// Красить цветной элемент в запрошенном цвете
		CBrush br(cr);
		pDC->FillRect(&lpDIS->rcItem, &br);
	}

	if ((lpDIS->itemState & ODS_SELECTED) &&
		(lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
	{
		// Элемент был выбран - hilite рамка
		COLORREF crHilite = RGB(255-GetRValue(cr),
			255-GetGValue(cr), 255-GetBValue(cr));
		CBrush br(crHilite);
		pDC->FrameRect(&lpDIS->rcItem, &br);
	}

	if (!(lpDIS->itemState & ODS_SELECTED) &&
		(lpDIS->itemAction & ODA_SELECT))
	{
		// Отменили выбор элемента - удаляем рамку
		CBrush br(cr);
		pDC->FrameRect(&lpDIS->rcItem, &br);
	}
}

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