一般的なディスプレイ デバイス コンテキスト
共通のデバイス コンテキスト は、ウィンドウのクライアント領域での描画に使用されます。 システムは、ウィンドウ クラスが表示デバイス コンテキスト スタイルを明示的に指定しないウィンドウに対して、既定で共通のデバイス コンテキストを提供します。 一般的なデバイス コンテキストは、通常、デバイス コンテキスト属性を大幅に変更せずに描画できるウィンドウで使用されます。 一般的なデバイス コンテキストは、追加のメモリやシステム リソースを必要としないため便利ですが、アプリケーションで多数の属性を使用する前に設定する必要がある場合は不便な場合があります。
システムは、ディスプレイ デバイス コンテキスト キャッシュからすべての一般的なデバイス コンテキストを取得します。 アプリケーションは、ウィンドウが作成された直後に共通のデバイス コンテキストを取得できます。 共通のデバイス コンテキストはキャッシュから取得されるため、アプリケーションは描画後にできるだけ早くデバイス コンテキストを常に解放する必要があります。 一般的なデバイス コンテキストが解放された後、有効ではなくなり、アプリケーションで描画を試みてはなりません。 もう一度描画するには、アプリケーションが新しい共通デバイス コンテキストを取得し、ウィンドウに描画するたびに共通のデバイス コンテキストを引き続き取得して解放する必要があります。 アプリケーションが、GetDC 関数を使用してデバイス コンテキスト ハンドルを取得する場合は、ReleaseDC 関数を使用してハンドルを解放する必要があります。 同様に、BeginPaint関数ごとに、アプリケーションは対応する EndPaint 関数を使用する必要があります。
アプリケーションがデバイス コンテキストを取得すると、クライアント領域の左上隅に合わせて配信元が調整されます。 また、クリッピング領域を設定して、デバイス コンテキストへの出力がクライアント領域にクリップされるようにします。 それ以外の場合は、クライアント領域の外部に表示されるすべての出力がクリップされます。 BeginPaintを使用してアプリケーションが共通のデバイス コンテキスト取得する場合、システムはクリッピング領域に更新領域も含め、出力をさらに制限します。
アプリケーションが共通のデバイス コンテキストを解放すると、システムはデバイス コンテキストの属性の既定値を復元します。 属性値を変更するアプリケーションは、共通のデバイス コンテキストを取得するたびにこれを行う必要があります。 デバイス コンテキストを解放すると、アプリケーションが選択した描画オブジェクトが解放されるため、アプリケーションはデバイス コンテキストを解放する前にこれらのオブジェクトを解放する必要はありません。 いずれの場合も、アプリケーションは、解放された後も、共通のデバイス コンテキストが既定以外の選択を保持することを想定してはなりません。