绘制自定义窗口背景

你可以绘制自己的窗口背景,而不是让系统为你绘制它。 大多数应用程序在注册窗口类时为类背景画笔指定画笔句柄或系统颜色值;系统使用画笔或颜色绘制背景。 但是,如果将类背景画笔设置为 NULL,则每当必须绘制窗口背景时,系统会向窗口过程发送 WM_ERASEBKGND 消息,以便绘制自定义背景。

在下面的示例中,窗口过程绘制一个适合窗口的大棋盘图案。 该过程使用白色画笔填充工作区,然后使用灰色画笔绘制 13 个 20x20 矩形。 绘制背景时要使用的显示设备上下文在消息的 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