Анализ дампа Википедии

Например, используя этот дамп Википедии:

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=lebron%20james&rvprop=content&

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

Есть помощь?

25
задан Uwe Keim 28 November 2018 в 07:27
поделиться

3 ответа

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

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

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

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

22
ответ дан 28 November 2019 в 21:18
поделиться

Краткий ответ: обработать WM_ERASEBKGND .

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

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

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

4
ответ дан 28 November 2019 в 21:18
поделиться

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

   HBRUSH brush = CreateSolidBrush(RGB(0, 0, 255));
   SetClassLongPtr(hwnd, GCLP_HBRBACKGROUND, (LONG)brush);
13
ответ дан 28 November 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: