クラスディスプレイデバイスコンテキスト
クラス デバイス コンテキストを使用すると、アプリケーションは、指定したクラスに属するすべてのウィンドウに対して 1 つの表示デバイス コンテキストを使用できます。 クラス デバイス コンテキストは、多くの場合、同じ属性値を使用して描画されるコントロール ウィンドウで使用されます。 プライベート デバイス コンテキストと同様に、クラス デバイス コンテキストは、描画用のデバイス コンテキストを準備するために必要な時間を最小限に抑えます。
システムは、CS_CLASSDC スタイルを持つウィンドウ クラスに属している場合に、ウィンドウのクラス デバイス コンテキストを提供します。 システムは、 クラスに属する最初のウィンドウを作成するときにデバイス コンテキストを作成し、その後にクラス内に作成されたすべてのウィンドウに対して同じデバイス コンテキストを使用します。 最初は、クラス デバイス コンテキストの属性の既定値は共通のデバイス コンテキストと同じですが、アプリケーションはこれらをいつでも変更できます。 クラスの最後のウィンドウが破棄されるまで、クリッピング領域とデバイスの配信元を除くすべての変更がシステムによって保持されます。 1 つのウィンドウに対して行われた変更は、そのクラス内のすべてのウィンドウに適用されます。
アプリケーションは、最初のウィンドウが作成された後に いつでも GetDC 関数を使用して、クラス デバイス コンテキストへのハンドルを取得できます。 クラス デバイス コンテキストはディスプレイ デバイス コンテキスト キャッシュに含まれていないため、アプリケーションはハンドルを解放せずに保持して使用できます。 アプリケーションが同じウィンドウ クラスに別のウィンドウを作成する場合、アプリケーションはクラス デバイス コンテキストをもう一度取得する必要があります。 デバイス コンテキストを取得すると、新しいウィンドウの正しいデバイスの配信元とクリッピング領域が設定されます。 アプリケーションが クラス内の新しいウィンドウのクラス デバイス コンテキストを取得した後、デバイス コンテキストを使用して元のウィンドウに描画することはできなくなります。そのウィンドウに対して再度取得する必要はありません。 一般に、ウィンドウに描画する必要があるたびに、アプリケーションはウィンドウのクラス デバイス コンテキストを明示的に取得する必要があります。
クラス デバイス コンテキストを使用するアプリケーションでは、WM_PAINT メッセージを処理するときに常に BeginPaint を呼び出す必要があります。 関数は、ウィンドウの正しいデバイスの配信元とクリッピング領域を設定し、更新領域を組み込みます。 BeginPaint が隠した場合、アプリケーションは EndPaint を呼び出してキャレットを復元する必要もあります。 EndPaint は、クラス デバイス コンテキストに対して他の影響を与えません。
システムは、 WM_ERASEBKGND メッセージをアプリケーションに送信するときにクラス デバイス コンテキストを渡し、現在の属性値が、このメッセージを処理するときにアプリケーションまたはシステムによって実行されるすべての描画に影響を与えるのを許可します。 プライベート デバイス コンテキストを持つウィンドウと同様に、アプリケーションは GetDCEx を 使用して、クラス デバイス コンテキストを持つウィンドウの共通のデバイス コンテキストをシステムに強制的に返すことができます。
クラス デバイス コンテキストの使用は推奨されません。