Share via


ウィンドウの更新ロック

ウィンドウ更新ロックは、ウィンドウ内の描画の一時的な中断です。 システムはロックを使用して、ユーザーがウィンドウを移動またはサイズを変更するたびに、他のウィンドウが追跡四角形の上に描画されないようにします。 アプリケーションは、独自のウィンドウで同様の移動操作やサイズ変更操作を実行した場合に、ロックを使用して描画を防止できます。

アプリケーションでは 、LockWindowUpdate 関数を使用してウィンドウ更新ロックを設定またはクリアし、ロックするウィンドウを指定します。 ロックは、指定されたウィンドウとそのすべての子ウィンドウに適用されます。 ロックが設定されると、 GetDC 関数と BeginPaint 関数は、表示領域が空のディスプレイ デバイス コンテキストを返します。 この場合、アプリケーションは引き続きウィンドウに描画できますが、すべての出力はクリップされます。 ロックは、ウィンドウに NULL を指定して LockWindowUpdate を呼び出して、アプリケーションがロックをクリアするまで保持されます。 LockWindowUpdate はウィンドウの表示領域を強制的に空にしますが、この関数は指定されたウィンドウを非表示にせず、WS_VISIBLE スタイル ビットをクリアしません。

ロックが設定された後、アプリケーションは GetDCEx 関数とDCX_LOCKWINDOWUPDATE値を使用して、ロックされたウィンドウに描画するディスプレイ デバイス コンテキストを取得できます。 これにより、キーボードまたはマウス メッセージを処理するときに、アプリケーションで追跡四角形を描画できます。 システムは、ユーザーがウィンドウを移動してサイズを設定するときに、このメソッドを使用します。 GetDCEx は、ディスプレイ デバイス コンテキスト キャッシュからディスプレイ デバイス コンテキストを取得するため、アプリケーションは描画後にできるだけ早くデバイス コンテキストを解放する必要があります。

ウィンドウ更新ロックが設定されている間、システムはロックされた各ウィンドウに対して累積された境界四角形を作成します。 ロックがクリアされると、システムはこの外接する四角形を使用して、ウィンドウとその子ウィンドウの更新領域を設定し、最終的な WM_PAINT メッセージを 強制します。 累積された外接する四角形が空の場合 (つまり、ロックが設定されている間に描画が発生していない場合)、更新領域は設定されません。