カスタム ウィンドウの背景の描画
システムで描画するのではなく、独自のウィンドウの背景を描画できます。 ほとんどのアプリケーションでは、ウィンドウ クラスを登録するときに、クラスの背景ブラシのブラシ ハンドルまたはシステムカラー値を指定します。システムは、ブラシまたは色を使用して背景を描画します。 ただし、クラスの背景ブラシを 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 にチェックします。