Для этого требуется специальная обработка сообщения WM_CTLCOLOR.
Это сообщение стандартные органы управления посылает функции родительского окна перед тем, как перерисовать изображение органа управления на экране.
Когда функция родительского окна получает сообщение WM_CTCOLOR, то в параметре wParam хранится дескриптор контекста устройства дочернего окна, в младшем слове параметра lParam – дескриптор самого дочернего окна, а в старшем слове параметра lParam при помощи предопределенных констант кодируется тип окна (органа управления):
Константа
| Тип окна
|
CTLCOLOR_MSGBOX
CTLCOLOR_EDIT
CTLCOLOR_LISTBOX
CTLCOLOR_BTN
CTLCOLOR_DLG
CTLCOLOR_SCROLLBAR
CTLCOLOR_STATIC
| Окно – сообщение
Окно – редактор
Окно – список
Окно – кнопка ( переключатель )
Диалоговое окно
Полоса прокрутки
Статический орган управления
|
То, что в параметре сообщения WM_CTLCOLOR содержится дескриптор контекста устройства, означает что можно изменять цвет дочернего окна – органа управления. В самом деле, любая функция GDI осуществляет действие именно над контекстом устройства, а он–то в сообщении WM_CTLCOLOR принадлежит органу управления.
Обрабатывая сообщение, необходимо проделать 3 операции:
1) Установить цвет фона при помощи функции SETBKCOLOR.
2) Установить цвет текста при помощи функции SETTEXTCOLOR.
3) Возвратить дочернему окну манипулятор той кисти, которой вы хотите отрисовать этот орган управления.
Однако у кисти, которая является шаблоном некоторой цветных пикселов, есть начальная точка – точка повторения шаблона. И если одну и туже кисть использовать для двух разных окон (например, для родительского и дочернего), то на их границе двух шаблоны стыковаться на будут. Для того чтобы избежать это, следует:
1) Вызовом функции UnrealizeObject «сбросить» начальную точку кисти, что приведет к тому, что при следующем выборе ее в контекст устройства она будет установлена заново.
2) Установит новую начальную точку кисти функцией SetBrushOrg; новая начальная точка будет установлена при следующем выборе кисти в контекст устройства.
Таким образом, можно установить цвет дочерних окон – органов управления.