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

アプリケーションは、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 を参照してください。

親デバイス コンテキスト

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