次の方法で共有


ウィンドウの背景

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

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

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

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

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

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