Я работаю над приложением Win32 C ++ GUI Desktop.
Весь текст редактирования статически создается в файле ресурсов, а его фон изменяется в процедуре DialogBox с помощью сообщений WM_CTLCOLOREDIT и WM_CTLCOLORSTATIC .
case WM_CTLCOLOREDIT:
if (lParam == (LPARAM)Edit1Hwnd)
return SetBkColor((HDC)wParam, GuiColors[RED]);
else if (lParam == (LPARAM)Edit2Hwnd)
return SetBkColor((HDC)wParam, GuiColors[GREEN]);
break;
case WM_CTLCOLORSTATIC:
if (lParam == (LPARAM)Edit3Hwnd)
return SetBkColor((HDC)wParam, GuiColors[BLUE]);
else if (lParam == (LPARAM)Edit4Hwnd)
return SetBkColor((HDC)wParam, GuiColors[YELLOW]);
break;
Когда окно загружается, я вижу, что все правки имеют правильный цвет фона.
Проблема возникает, когда я использую Common Controls 6.0 (который мне нужен для загрузки BMP в качестве фона для просмотра списка).
Чтобы включить Common Controls 6.0, я делаю:
#pragma comment(linker,"\"/manifestdependency:type='win32' \name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
Если я запускаю программу с включенными общими элементами управления, весь текст редактирования отображается на белом фоне. Но я могу изменить цвет редактирования, выбрав его курсором мыши.
При поиске на сайте я нашел этот вопрос .
Это подтверждает поведение, которое я испытываю, но не дает решения для изменения цвета фона редактирования, когда у него нет фокуса.
Любая помощь приветствуется.
EDIT:
Спасибо RbMm за ответ, я изменил код на
case WM_CTLCOLOREDIT:
if (lParam == (LPARAM)Edit1Hwnd)
return (LRESULT)redBrush;
break;
Где redBrush
объявлено и создано следующим образом
static HBRUSH redBrush = NULL;
redBrush = CreateSolidBrush(GuiColors[RED]);
Цвет фона редактирования в начале правильно окрашен красным, но когда фокус получает фокус, он снова становится белым (он снова становится красным, когда фокус теряется).
РЕДАКТИРОВАТЬ 2:
Спасибо zett42, теперь это работает!
case WM_CTLCOLOREDIT:
if (lParam == (LPARAM)Edit1Hwnd){
SetBkColor((HDC)wParam, GuiColors[RED]);
return (LRESULT)redBrush;
}
break;