Подтвердить что ты не робот

Как установить цвет фона окна после того, как я его зарегистрировал?

Я не использую диалог, я использую свой собственный пользовательский класс, который я зарегистрировал, а затем использовал вызов CreateWindow для его создания. Я предварительно задал цвет фона красным при регистрации:

    WNDCLASSEX wc;
wc.hbrBackground = CreateSolidBrush(RGB(255, 0, 0));

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

Я попытался использовать вызов SetBkColor() в WM_PAINT и попытался вернуть кисть из сообщения WM_CTLCOLORDLG, они не работают.

любая помощь?

4b9b3361

Ответ 1

Из Окно фона:

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

Приложение может обрабатывать Сообщение WM_ERASEBKGND, хотя определена цветовая кисть класса. Это типично для приложений, которые разрешить пользователю изменять окно цвет фона или узор для указанное окно, не затрагивая другие окна в классе. В таком случаях, заявка не должна проходить сообщение DefWindowProc......

Итак, используйте WM_ERASEBKGND сообщение wParam, чтобы получить DC и нарисовать фон.

Ответ 2

Вы можете попробовать следующее:

   HBRUSH brush = CreateSolidBrush(RGB(0, 0, 255));
   SetClassLongPtr(hwnd, GCLP_HBRBACKGROUND, (LONG)brush);

Ответ 3

Краткий ответ: Ручка WM_ERASEBKGND.

Дольше ответ:

Когда вы регистрируете WNDCLASS, вы предоставляете информацию обо всех окнах этого класса. Поэтому, если вы хотите изменить цвет только одного экземпляра окна, вам нужно будет обработать его самостоятельно.

Когда придет время перекрасить ваше окно, система отправит ваше сообщение wndproc a WM_ERASEBKGND. Если вы не справитесь с этим, DefWindowProc удалит область клиента с цветом из класса окна. Но вы можете обрабатывать сообщение напрямую, рисуя любой цвет (или фоновый рисунок), который вам нравится.