Вы можете рисовать свой собственный фон окна, а не предоставлять системе рисовать его для Вас. Большинство приложений устанавливает дескриптор кисти или значение системного цвета для кисти для фона класса, регистрируя класс окна; система использует кисть или цвет, чтобы рисовать фон. Даже если Вы устанавливаете кисть для фона класса в NULL, тем не менее, система отправляет сообщение WM_ERASEBKGND Вашей оконной процедуре всякий раз, когда фон окна должен рисоваться, позволяя Вам рисовать пользовательский фон.
В примере ниже, оконная процедура рисует большой узор шахматной доски, который помещается аккуратно в окне. Процедура закрашивает рабочую область белой кистью, а затем рисует тринадцать 20х20 пикселей прямоугольников, используя серую кисть. Контекст устройства (DC) отображения, который используется для рисования фона, определяется в параметре wParam для сообщения.
HBRUSH hbrWhite, hbrGray;
.
.
.
case WM_CREATE:
hbrWhite = GetStockObject(WHITE_BRUSH);
hbrGray = GetStockObject(GRAY_BRUSH);
return 0L;
case WM_ERASEBKGND:
hdc = (HDC) wParam;
GetClientRect(hwnd, &rc);
SetMapMode(hdc, MM_ANISOTROPIC);
SetWindowExtEx(hdc, 100, 100, NULL);
SetViewportExtEx(hdc, rc.right, rc.bottom, NULL);
FillRect(hdc, &rc, hbrWhite);
for (i = 0; i < 13; i++)
{
x = (i * 40) % 100;
y = ((i * 40) / 100) * 20;
SetRect(&rc, x, y, x + 20, y + 20);
FillRect(hdc, &rc, hbrGray);
}
return 1L; |
Если приложение рисует свое собственное свернутое окно, система также отправляет сообщение WM_ERASEBKGND оконной процедуре, чтобы рисовать фон свернутого окна. Вы можете использовать ту же самую технику, используемую WM_PAINT, чтобы определить минимизировано ли окно, то есть, вызовите функцию IsIconic и проверку возвращаемого значения на TRUE.