Share via


ウィンドウの背景

ウィンドウの背景は、ウィンドウの描画を開始する前にクライアント領域を塗りつぶすために使用される色またはパターンです。 ウィンドウの背景は、ウィンドウが移動される前に画面に表示されていたものをカバーし、既存の画像を消去し、アプリケーションの新しい出力が関連のない情報と混在しないようにします。

システムは、ウィンドウの背景を描画するか、アプリケーションが BeginPaint を呼び出すときにWM_ERASEBKGND メッセージを送信することで、ウィンドウにこれを行う機会を与えます。 アプリケーションがメッセージを処理せず DefWindowProc に渡す場合、システムは、ウィンドウの クラスで指定された背景ブラシでパターンを入力して背景を消去します。 ブラシが無効な場合、またはクラスに背景ブラシがない場合、システムは BeginPaint が返す PAINTSTRUCT 構造体の fErase メンバーを設定しますが、他のアクションは実行しません。 その後、必要に応じて、アプリケーションでウィンドウの背景を描画する 2 回目の機会が得られます。

WM_ERASEBKGND処理する場合、アプリケーションはメッセージの wParam パラメーターを使用して背景を描画する必要があります。 このパラメーターには、ウィンドウのディスプレイ デバイス コンテキストへのハンドルが含まれています。 背景を描画した後、アプリケーションは 0 以外の値を返す必要があります。 これにより、アプリケーションが後続のWM_PAINT メッセージを処理するときに、BeginPaintPAINTSTRUCT 構造体の fErase メンバーを誤って 0 以外の値 (背景を消去する必要があることを示す) に設定されないようにします。

アプリケーションでは、クラスを RegisterClass 関数に登録するときに、WNDCLASS 構造体の hbrBackground メンバーにブラシ ハンドルまたはシステム カラー値を割り当てることで、クラスの背景ブラシを定義できます。 GetStockObject または CreateSolidBrush 関数を使用して、ブラシ ハンドルを作成できます。 システム カラー値には 、SetSysColors 関数に対して定義されているもののいずれかを指定できます。 (メンバーに割り当てる前に、値を 1 ずつ増やす必要があります)。

アプリケーションは、クラスのバックグラウンド ブラシが定義されている場合でも、 WM_ERASEBKGND メッセージを処理できます。 これは、ユーザーがクラス内の他のウィンドウに影響を与えることなく、指定されたウィンドウのウィンドウの背景色またはパターンを変更できるようにするアプリケーションで一般的です。 このような場合、アプリケーションは DefWindowProc にメッセージを渡す必要があります。

ウィンドウの原点を参照ポイントとして使用してブラシを描画するため、アプリケーションでブラシを揃える必要はありません。 この場合、ユーザーはパターン ブラシの配置に影響を与えずにウィンドウを移動できます。