Шаг 276 - DrawItem и произвольная отрисовка элементов DRAWITEMSTRUCT

В прошлом шаге мы с Вами посмотрели как самому перерисовать элементы списка. Но данная возможность используется часто и для многих элементов управления.

void CTabCtrl::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
void CListBox::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
void CButton::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
void CComboBox::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );  
void CCheckListBox::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
void CMenu::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
void CHeaderCtrl::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
void CStatusBar::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); 

Со всеми этими классами работа производится совершенно идентично. Устанавливается стиль и перегружается функция DrawItem(), в которую передается указатель на структуру DRAWITEMSTRUCT содержащей информация о том, что нужно отрисовывать. Вот она какая.

/*
 * DRAWITEMSTRUCT for ownerdraw
 */
typedef struct tagDRAWITEMSTRUCT 
{
    UINT        CtlType;		// Тип элемента управления
    UINT        CtlID;		// Идентификатор элемента управления
    UINT        itemID;		// Идентификатор перерисовываемого пункта
    UINT        itemAction;		// Как перерисовывать
    UINT        itemState;		// Состояние после перерисовки
    HWND        hwndItem;		// Дескриптор элемента управления
    HDC         hDC;		// Контекст устройства рисования
    RECT        rcItem;		// Граница рисования
    DWORD       itemData;		// Адрес элемента для перерисовки
} DRAWITEMSTRUCT, NEAR *PDRAWITEMSTRUCT, FAR *LPDRAWITEMSTRUCT;

CtlType - тип элемента для перерисовки:

itemAction - как перерисовывать:

itemState - состояние после перерисовки:


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