Как установить цвет фона окна после его регистрации? - PullRequest
23 голосов
/ 12 августа 2010

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

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

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

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

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

Ответы [ 3 ]

22 голосов
/ 12 августа 2010

С Фон окна приходит:

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

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

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

12 голосов
/ 12 августа 2010

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

   HBRUSH brush = CreateSolidBrush(RGB(0, 0, 255));
   SetClassLongPtr(hwnd, GCLP_HBRBACKGROUND, (LONG)brush);
4 голосов
/ 12 августа 2010

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

Более длинный ответ:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...