次の方法で共有


プライベートディスプレイデバイスコンテキスト

プライベート デバイス コンテキスト を使用すると、アプリケーションがウィンドウに描画する必要があるたびに、アプリケーションでディスプレイ デバイス コンテキストの取得と初期化を回避できます。 プライベート デバイス コンテキストは、描画用にデバイス コンテキストの属性の値を多く変更する必要があるウィンドウに役立ちます。 プライベート デバイス コンテキストにより、デバイス コンテキストの準備に必要な時間が短縮されるため、ウィンドウで描画を実行するために必要な時間が短縮されます。

アプリケーションは、ウィンドウ クラスでCS_OWNDC スタイルを指定して、ウィンドウのプライベート デバイス コンテキストを作成するようにシステムに指示します。 システムは、クラスに属する新しいウィンドウを作成するたびに、一意のプライベート デバイス コンテキストを作成します。 最初は、プライベート デバイス コンテキストの属性の既定値は共通のデバイス コンテキストと同じですが、アプリケーションはこれらをいつでも変更できます。 システムは、ウィンドウの有効期間中、またはアプリケーションが追加の変更を行うまで、デバイス コンテキストへの変更を保持します。

アプリケーションは、ウィンドウの作成後にいつでも GetDC 関数を使用して、プライベート デバイス コンテキストへのハンドルを取得できます。 アプリケーションは、ハンドルを 1 回だけ取得する必要があります。 その後、ハンドルを何度でも保持して使用することができます。 プライベート デバイス コンテキストはディスプレイ デバイス コンテキスト キャッシュの一部ではないため、アプリケーションは、ReleaseDC 関数を使用してデバイス コンテキストを解放する必要はありません。

システムは、移動やサイズ変更など、ウィンドウへの変更を反映するようにデバイス コンテキストを自動的に調整します。 これにより、重複するウィンドウが常に適切にクリップされます。つまり、クリッピングを確保するためにアプリケーションでアクションは必要ありません。 ただし、更新リージョンを含むようにデバイス コンテキストが変更されることはありません。 したがって、WM_PAINT メッセージを処理する場合、アプリケーションは、BeginPaint を呼び出すか、更新領域を取得して現在のクリッピング領域と交差させることによって、更新領域を組み込む必要があります。 アプリケーションが BeginPaint 呼び出さない場合は、ValidateRect または ValidateRgn関数を使用して、更新リージョン明示的に検証する必要があります。 アプリケーションが更新リージョンを検証しない場合、ウィンドウは無限の一連の WM_PAINT メッセージを受け取ります。

ウィンドウ 表示されている場合、BeginPaint はキャレットを非表示にするため、BeginPaint 呼び出すアプリケーションは、EndPaint 関数も呼び出してキャレットを復元する必要があります。 EndPaint は、プライベート デバイス コンテキストに対して他の影響を与えません。

プライベート デバイス コンテキストは便利に使用できますが、システム リソースの観点からはメモリを大量に消費するため、800 バイト以上を格納する必要があります。 パフォーマンスに関する考慮事項がストレージ コストを上回る場合は、プライベート デバイス コンテキストをお勧めします。

WM_ERASEBKGND メッセージをアプリケーションに送信するときに、システムにはプライベート デバイス コンテキストが含まれます。 マッピング モードを含むプライベート デバイス コンテキストの現在の選択は、アプリケーションまたはシステムがこれらのメッセージを処理するときに有効になります。 望ましくない影響を回避するために、システムは背景を消去するときに論理座標を使用します。たとえば、GetClipBox 関数を使用して、消去する領域の論理座標を取得し、これらの座標を FillRect 関数に渡します。 これらのメッセージを処理するアプリケーションでも、同様の手法を使用できます。

アプリケーションは、GetDCEx 関数を使用して、プライベート デバイス コンテキストを持つウィンドウの共通デバイス コンテキストをシステムに強制的に返すことができます。 これは、プライベート デバイス コンテキストの属性の現在の値を変更せずに、ウィンドウにすばやくタッチアップする場合に便利です。