В прошлом шаге мы с Вами посмотрели как самому перерисовать элементы списка. Но данная возможность используется часто и для многих элементов управления.
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 - состояние после перерисовки: