Share via


子ウィンドウの更新リージョン

子ウィンドウは、WS_CHILDまたはWS_CHILDWINDOW スタイルを持つウィンドウです。 他のウィンドウ スタイルと同様に、子ウィンドウ はWM_PAINT メッセージを受け取り、更新を求めるメッセージを受け取ります。 各子ウィンドウには更新リージョンがあり、システムまたはアプリケーションが最終的 なWM_PAINT メッセージを生成するように設定できます。

子ウィンドウの更新と表示領域は、子の親ウィンドウの影響を受ける。これは、他のスタイルのウィンドウには当てはまりません。 多くの場合、親ウィンドウの更新領域を設定すると、子ウィンドウの更新領域が設定され、親ウィンドウがメッセージを受信したときに子ウィンドウ WM_PAINT メッセージが受信されます。 システムは、子ウィンドウの表示領域の位置を親ウィンドウのクライアント領域内に制限し、子ウィンドウの任意の部分を親ウィンドウの外側に移動してクリップします。

親ウィンドウの更新領域の一部に子ウィンドウの一部が含まれる場合は常に、子ウィンドウの更新領域が設定されます。 このような場合、システムは最初に WM_PAINT メッセージを親ウィンドウに送信してから、子ウィンドウにメッセージを送信し、親が描画した可能性のあるウィンドウの一部を子ウィンドウに復元できるようにします。

子が設定されている場合、システムは親の更新領域を設定しません。 アプリケーションは、子ウィンドウを無効にして、親ウィンドウの WM_PAINT メッセージを生成できません。 同様に、アプリケーションは、子ウィンドウの下にある親のクライアント領域の一部を無効にして、子の WM_PAINT メッセージを生成できません。 このような場合、どちらのウィンドウも WM_PAINT メッセージを受信します。

アプリケーションでは、親ウィンドウの作成時にWS_CLIPCHILDRENスタイルを指定することで、親ウィンドウの設定時に子ウィンドウの更新領域が設定されないようにすることができます。 このスタイルを設定すると、親の表示領域から子ウィンドウが除外されるため、子ウィンドウを含む可能性のある更新領域の一部は無視されます。 アプリケーションが親ウィンドウで描画されると、子ウィンドウをカバーする図面がクリップされ、子ウィンドウへの後続 のWM_PAINT メッセージは不要になります。

子ウィンドウの更新および表示領域も、子ウィンドウの兄弟によって影響を受ける。 兄弟ウィンドウは、共通の親ウィンドウを持つ任意のウィンドウです。 兄弟ウィンドウが重複している場合、更新領域を 1 つに設定すると、別の更新領域が影響を受け、 WM_PAINT メッセージが両方のウィンドウに送信されます。 親チェーン内のウィンドウが複合されている場合 (WX_EX_COMPOSITEDを持つウィンドウ)、兄弟ウィンドウは Z オーダーの位置の逆の順序で WM_PAINT メッセージを受信します。 この場合、ウィンドウの Z オーダー (上部) で最も高いウィンドウは 、最後にWM_PAINT メッセージを受け取ります。その逆も同様です。 親チェーン内のウィンドウが複合化されていない場合、兄弟ウィンドウは WM_PAINT メッセージを Z 順に受信します。

兄弟ウィンドウは自動的にクリップされません。 図面ウィンドウの Z オーダーの位置が低い場合でも、ある兄弟は別の重なり合う兄弟の上に描画できます。 アプリケーションでは、ウィンドウの作成時に WS_CLIPSIBLINGS スタイルを指定することで、これを防ぐことができます。 このスタイルを設定すると、重複する兄弟ウィンドウの Z オーダーの位置が高い場合、重複する兄弟ウィンドウのすべての部分がウィンドウの表示領域から除外されます。

注意

WS_POPUPまたはWS_POPUPWINDOWスタイルを持つウィンドウの更新および表示領域は、親ウィンドウの影響を受けません。