次の方法で共有


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

子ウィンドウは、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 メッセージを受信し、その逆も受信します。 親チェーン内のウィンドウが複合されていない場合、兄弟ウィンドウは Z 順に WM_PAINT メッセージを受信します。

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

手記

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