1 ответ:
В общем случае вы можете создать кисть в куче, например, используя
static HBRUSH hbrush; ... hbrush = CreateSolidBrush(RGB(255,0,0));Затем в процедуре окна или диалога обработайте сообщения
WM_CTL***и верните ручку кисти, напримерcase WM_CTLCOLORBTN: case WM_CTLCOLORSTATIC: case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: { HDC hdc = (HDC)wParam; SetTextColor(hdc, RGB(0, 0, 255)); //change text color SetBkMode(hdc, TRANSPARENT); //change text-background color, or set it to transparent return (INT_PTR)hbrush; }Это работает и для ComboBox. Если вы хотите обрабатывать различные элементы управления по отдельности, вы можете проверить
lParamотносительно дескриптора элемента управления.Для ComboBox это немного сложнее. Вы должны получить ручку для редактирования и списка ComboBox. Вы можете сделать это с помощью
GetComboBoxInfocase WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: { HWND hTest = (HWND)lParam; COMBOBOXINFO ci = { sizeof(COMBOBOXINFO) }; GetComboBoxInfo(hComboBox, &ci); if ( hTest == ci.hwndItem || hTest == ci.hwndList ) { HDC hdc = (HDC)wParam; SetTextColor(hdc, RGB(0, 0, 255)); SetBkMode(hdc, TRANSPARENT); return (INT_PTR)hbrush; } }
Comments