デバイス コンテキストの表示

アプリケーションは、BeginPaintGetDC、または GetDCEx 関数を呼び出し、対応する出力が表示されるウィンドウを識別することで、ディスプレイ DC を取得します。 通常、アプリケーションは、クライアント領域に描画する必要がある場合にのみ、ディスプレイ DC を取得します。 ただし、GetWindowDC 関数を呼び出すことによってウィンドウ デバイス コンテキストを取得できます。 アプリケーションの描画が完了したら、 EndPaint または ReleaseDC 関数を呼び出して DC を解放する必要があります。

ビデオ ディスプレイには、次の 5 種類の DC があります。

  • クラス
  • 共通
  • 非公開
  • ウィンドウ
  • Parent

クラス デバイス コンテキスト

クラス デバイス コンテキストは、16 ビット バージョンのWindowsとの互換性のために厳密にサポートされています。 アプリケーションを記述するときは、クラス デバイス コンテキストを使用しないでください。代わりにプライベート デバイス コンテキストを使用してください。

一般的なデバイス コンテキスト

一般的なデバイス コンテキスト は、システムによって特別なキャッシュに保持されるディスプレイ DC です。 一般的なデバイス コンテキストは、描画操作の頻度が低いアプリケーションで使用されます。 システムは DC ハンドルを返す前に、既定のオブジェクト、属性、およびモードを使用して共通のデバイス コンテキストを初期化します。 新しいオブジェクトの選択、既存のオブジェクトの属性の変更、または新しいモードの選択を行うために GDI 関数のいずれかが呼び出されない限り、アプリケーションによって実行されるすべての描画操作では、これらの既定値が使用されます。

一般的なデバイス コンテキストの数は限られているため、アプリケーションは描画が完了した後に解放する必要があります。 アプリケーションが共通のデバイス コンテキストを解放すると、既定のデータに対する変更はすべて失われます。

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

プライベート デバイス コンテキスト は、一般的なデバイス コンテキストとは異なり、アプリケーションがデータを解放した後も既定のデータに対する変更を保持する DC を表示します。 プライベート デバイス コンテキストは、コンピューター支援設計 (CAD) アプリケーション、デスクトップパブリッシング アプリケーション、描画および描画アプリケーションなど、多数の描画操作を実行するアプリケーションで使用されます。 プライベート デバイス コンテキストはシステム キャッシュに含まれていないため、使用後に解放する必要はありません。 システムは、そのクラスの最後のウィンドウが破棄された後、プライベート デバイス コンテキストを自動的に削除します。

アプリケーションは、WNDCLASS 構造体のスタイル メンバーを初期化し、RegisterClass 関数を呼び出すときに、まず CS_OWNDC ウィンドウ クラス スタイルを指定してプライベート デバイス コンテキストを作成します。 (ウィンドウ クラスの詳細については、「 ウィンドウ クラス」を参照してください)。

CS_OWNDC スタイルのウィンドウを作成した後、アプリケーションは GetDCGetDCEx、または BeginPaint 関数を 1 回呼び出して、プライベート デバイス コンテキストを識別するハンドルを取得できます。 アプリケーションは、このクラスで作成されたウィンドウを削除するまで、このハンドル (および関連付けられている DC) を引き続き使用できます。 グラフィック オブジェクトとその属性、またはグラフィック モードに対する変更は、ウィンドウが削除されるまでシステムによって保持されます。

ウィンドウ デバイス コンテキスト

ウィンドウ デバイス コンテキストを使用すると、アプリケーションは、クライアント以外の領域を含め、ウィンドウ内の任意の場所に描画できます。 ウィンドウ デバイス コンテキストは、通常、カスタムの非クライアント領域を持つウィンドウの WM_NCPAINT メッセージと WM_NCACTIVATE メッセージを処理するアプリケーションで使用されます。 ウィンドウ デバイス コンテキストの使用は、他の目的には推奨されません。 詳細については、以下を参照してください。 GetWindowDC を参照してください。

親デバイス コンテキスト

親デバイス コンテキストを使用すると、アプリケーションはウィンドウのクリッピング領域を設定するために必要な時間を最小限に抑えることができます。 アプリケーションでは通常、親デバイス コンテキストを使用して、プライベートまたはクラスのデバイス コンテキストを必要とせずに、コントロール ウィンドウの描画を高速化します。 たとえば、システムは、プッシュ ボタンと編集コントロールに親デバイス コンテキストを使用します。 親デバイス コンテキストは、子ウィンドウでのみ使用することを目的としており、最上位またはポップアップ ウィンドウでは使用されません。 詳細については、以下を参照してください。「 親ディスプレイ デバイス コンテキスト」を参照してください。