Например, используя этот дамп Википедии:
http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=lebron%20james&rvprop=content&
Я попытался использовать вызов SetBkColor ()
в WM_PAINT
и попытался вернуть кисть из сообщения WM_CTLCOLORDLG
, они не работают.
Есть помощь?
Из Фон окна приходит:
... Система рисует фон для окно или дает окну возможность сделать это, отправив ему Сообщение WM_ERASEBKGND, когда приложение вызывает BeginPaint. Если приложение не обрабатывает сообщение, но передает его DefWindowProc, система стирает фон, заполнив его узор на фоне кисти заданный классом окна .....
...... Приложение может обрабатывать Сообщение WM_ERASEBKGND, даже если определена кисть фона класса. Это типично для приложений, которые разрешить пользователю изменять окно цвет фона или узор для указанное окно, не затрагивая другие окна в классе. В таком случаях, заявка не должна проходить сообщение DefWindowProc. .....
Итак, используйте wParam сообщения WM_ERASEBKGND, чтобы получить DC и нарисовать фон.
Краткий ответ: обработать WM_ERASEBKGND
.
Более длинный ответ:
Когда вы регистрируете WNDCLASS, вы предоставляете информацию обо всех окнах этого класса. Поэтому, если вы хотите изменить цвет только одного экземпляра окна, вам нужно будет обработать это самостоятельно.
Когда придет время перекрасить окно, система отправит вашему wndproc сообщение WM_ERASEBKGND
. Если вы не справитесь с этим, DefWindowProc
сотрет клиентскую область цветом из класса окна. Но вы можете обработать сообщение напрямую, раскрасив любой цвет (или фоновый рисунок), который вам нравится.
Вы можете попробовать следующее:
HBRUSH brush = CreateSolidBrush(RGB(0, 0, 255));
SetClassLongPtr(hwnd, GCLP_HBRBACKGROUND, (LONG)brush);