您可以绘制自己的窗口背景,而不是让Windows为您绘制。大多数应用程序在注册窗口类时指定类背景画笔的刷柄或系统颜色值; Windows使用画笔或颜色绘制背景。如果将类背景画刷设置为NULL,则Windows必须绘制窗口背景时才会向窗口过程发送WM_ERASEBKGND消息,以便您绘制自定义背景。
在下面的示例中,窗口过程绘制了一个大的棋盘图案,整齐地放在窗口中。该过程用白色画笔填充客户区,然后使用灰色画笔绘制十三个20 x 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;
如果应用程序绘制自己的最小化窗口,Windows还会向窗口过程发送WM_ERASEBKGND消息以绘制最小化窗口的背景。您可以使用WM_PAINT使用的相同技术来确定窗口是否最小化__,即调用IsIconic函数并检查返回值为TRUE。