Вы можете рисовать свой собственный фон окна, а не предоставлять системе рисовать его для Вас. Большинство приложений устанавливает дескриптор кисти или значение системного цвета для кисти для фона класса, регистрируя класс окна; система использует кисть или цвет, чтобы рисовать фон. Даже если Вы устанавливаете кисть для фона класса в 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.