Смекни!
smekni.com

Работа с окнами приложений (стр. 4 из 4)

HDC hDC; // хендл контекста устройства для рисования

RECT rcItem; // прямоугольник, в котором надо рисовать

DWORD itemData; // данные элемента

} DRAWITEMSTRUCT;

Обратим внимание на поля itemAction и itemState. Они в некоторой степени дублируют друг друга, так как itemState указывает текущее состояние элемента, а itemAction - причину рисования, например получение фокуса или выбор элемента. Для упрощения логики рисования, можно перерисовывать все окошко, ориентируясь только на поле itemState, указывающее как надо рисовать.

Если надо нарисовать элемент, имеющий фокус, то можно оспользоваться функцией

void DrawFocusRect( hDC, lpRect );

которая рисует пунктирный прямоугольник, обычно изображающий элемент, имеющий фокус ввода.

Управление цветом дочерних окон

Окна, принадлежащие к стандартным классам дочерних окон, предусматривают специальный механизм для управления их цветом. Он основан на использовании сообщения WM_CTLCOLOR, которое дочернее окно посылает родительскому для определения нужных цветов.

WM_CTLCOLOR DC CtlType&hwndChild

Параметры этого сообщения следующие:

wPar содержит хендл контекста устройства рисуемого окна младшее слово lPar содержит хендл этого окна, а старшее - тип рисуемого окна:

CTLCOLOR_BTN, CTLCOLOR_DLG, CTLCOLOR_EDIT, CTLCOLOR_LISTBOX, CTLCOLOR_MSGBOX, CTLCOLOR_SCROLLBAR, CTLCOLOR_STATIC

Обрабатывая это сообщение, Вы должны установить требуемые атрибуты, например, цвета текста, фона, режим заполнения фона в указанном контексте устройства и вернуть хендл кисти, которая будет использоваться для закраски фона.

К сожалению, не все стандартные управляющие элементы корректно используют это сообщение. Например, нажимаемые кнопки используют указанную Вами кисть для рисования фона под кнопкой, а сама кнопка использует серую кисть - так что Ваш выбор не используется.