Не удается изменить фон редактирования текста при использовании Common Controls 6.0 - PullRequest
0 голосов
/ 08 января 2019

Я работаю над приложением 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...