Как просто сделать недействительным фон окна, а не пиксель клиентской области? - PullRequest
0 голосов
/ 23 ноября 2010

просто хочу перекрасить фон, а не какую-либо часть клиентской области.

Ответы [ 3 ]

1 голос
/ 23 ноября 2010

Вы не можете.Фон окрашен в дочерней области окна.Если окно использует дочерние элементы управления для рисования объектов (в своей клиентской области), то вы можете использовать стиль WS_CLIPCHILDREN, чтобы гарантировать, что фоновая окраска родительского окна не закрашивает дочерние элементы.

Вам потребуетсяоднако, чтобы просто закрасить соответствующую область в родительском окне, любой вызов типа InvalidateRect приведет к тому, что любые перекрывающиеся дочерние окна будут перекрашены независимо.

0 голосов
/ 23 ноября 2010

Когда вы говорите " не пиксели клиентской " области, я предполагаю, что вы хотите сделать недействительной область не-клиент ?Если это так, попробуйте использовать функцию SetWindowPos() с флагами SWP_NOMOVE | SWP_NOSIZE | SWP_DRAWFRAME.

0 голосов
/ 23 ноября 2010

Попробуйте с WM_ERASEBKGND .

Пример:

 HDC hDC = GetDCEx(hWnd, NULL, DCX_CLIPCHILDREN | DCX_CACHE);
 SendMessage(WM_ERASEBKGND, (WPARAM)hDC, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...