Share via


カスタム ウィンドウの背景の描画

システムで描画するのではなく、独自のウィンドウの背景を描画できます。 ほとんどのアプリケーションでは、ウィンドウ クラスを登録するときに、クラスの背景ブラシのブラシ ハンドルまたはシステムカラー値を指定します。システムは、ブラシまたは色を使用して背景を描画します。 ただし、クラスの背景ブラシを NULL に設定すると、ウィンドウの背景を描画する必要があるときに常に WM_ERASEBKGNDメッセージが ウィンドウ プロシージャに送信され、カスタムの背景を描画できるようになります。

次の例では、ウィンドウ プロシージャによって、ウィンドウにきれいに収まる大きなチェッカーボード パターンが描画されます。 この手順では、クライアント領域に白いブラシを塗りつぶし、灰色のブラシを使用して 13 個の 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 にチェックします。