Рисование пользовательского фона окна

Вы можете нарисовать собственный фон окна вместо того, чтобы система рисовала его за вас. Большинство приложений указывают дескриптор кисти или системное значение цвета для фоновой кисти класса при регистрации класса окна; система использует кисть или цвет для рисования фона. Однако если для фоновой кисти класса задано значение NULL, система отправляет WM_ERASEBKGND сообщение в процедуру окна всякий раз, когда фон окна должен быть нарисован, что позволяет нарисовать пользовательский фон.

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