GetDCEx

https://msdn.microsoft.com/ja-jp/library/cc428944.aspx https://msdn.microsoft.com/ja-jp/library/ms633576.aspx https://msdn.microsoft.com/ja-jp/library/ms633576.aspx

指定されたウィンドウのクライアント領域または画面全体を表すデバイスコンテキストのハンドルを取得します。その後、GDI 関数を使って、返されたデバイスコンテキスト内で描画を行えます。

この関数は、GetDC 関数に拡張を加えたものであり、クライアント領域内に新しいリージョンを作成する(クリッピング)方法をアプリケーションから詳細に制御できるようにします。

HDC GetDCEx(
  HWND hWnd,      // ウィンドウのハンドル
  HRGN hrgnClip,  // クリッピング領域のハンドル
  DWORD flags     // 作成オプション
);

パラメータ

hWnd
デバイスコンテキストの取得対象となるウィンドウのハンドルを指定します。NULL を指定すると、GetDCEx は画面全体を表すデバイスコンテキストを取得します。

Windows 98 と Windows 2000:NULL を指定すると、GetDC はプライマリモニタのデバイスコンテキストを取得します。他のモニタのデバイスコンテキストを取得するには、EnumDisplayMonitorsCreateDC の各関数を使ってください。

hrgnClip
クリッピングリージョンを指定します。このクリッピングリージョンを、デバイスコンテキストの可視リージョンと組み合わせることもできます。flags パラメータで DCX_INTERSECTRGN または DCX_EXCLUDERGN を指定した場合、オペレーティングシステムはこのクリッピングリージョンの所有権を取得し、必要がなくなった段階で自動的に削除します。この場合、GetDCEx の呼び出しに成功した後は、アプリケーションはこのクリッピングリージョンを使うべきではありませんし、削除するべきでもありません。
flags
デバイスコンテキストの作成方法を指定します。次の値の任意の組み合わせを指定します。
意味
DCX_WINDOWクライアント領域内の長方形ではなく、ウィンドウ全体の長方形を表すデバイスコンテキストを取得します。
DCX_CACHEOWNDC や CLASSDC に対応するウィンドウからではなく、キャッシュからデバイスコンテキスト(つまりオペレーティングシステムが所有している内部のデバイスコンテキスト)を取得します。この値を指定すると、事実上、CS_OWNDC と CS_CLASSDC が無効になります。
DCX_PARENTCLIP親ウィンドウの可視リージョンを使います。親ウィンドウの WS_CLIPCHILDREN スタイルや CS_PARENTDC スタイルを無視します。デバイスコンテキストの原点は、hWnd パラメータで指定されたウィンドウの左上隅に設定されます。
DCX_CLIPSIBLINGSクリッピングリージョンから、hWnd パラメータで指定されたウィンドウより前面(奥行き方向の手前)にあるすべての兄弟ウィンドウの可視リージョンを除外します。
DCX_CLIPCHILDRENクリッピング領域から、hWnd パラメータで指定されたウィンドウより背面(奥行き方向の奥)にあるすべての子ウィンドウの可視リージョンを除外します。
DCX_NORESETATTRSこのデバイスコンテキストを解放する際に、属性を既定値へ戻しません。
DCX_LOCKWINDOWUPDATELockWindowUpdate 関数を呼び出した結果、ウィンドウのロックが有効になっている場合でも描画を可能にします。本来なら、このウィンドウへの描画を行えません。トラッキング中に描画を行う場合に、この値を使います。
DCX_EXCLUDERGNデバイスコンテキストの可視リージョンから、hrgnClip パラメータで指定されたクリッピングリージョンを除外します。
DCX_INTERSECTRGNデバイスコンテキストの可視リージョンと、hrgnClip パラメータで指定されたクリッピングリージョンの共通部分を、新しいクリッピングリージョンとします。
DCX_VALIDATEDCX_INTERSECTUPDATE と DCX_VALIDATE の両方を指定すると、デバイスコンテキストが完全に有効になります。これらの値を指定してこの関数を呼び出すと、BeginPaint 関数を呼び出したのと同じ結果になります。

戻り値

関数が成功すると、指定されたウィンドウに関連するデバイスコンテキストのハンドルが返ります。

関数が失敗すると、NULL が返ります。hWnd パラメータで無効な値を指定すると、関数は失敗します。

Windows NT/2000:拡張エラー情報を取得するには、 関数を使います。

解説

デバイスコンテキストが不要になったら、ReleaseDC 関数を呼び出して解放してください。ただし、ウィンドウクラスに属しているディスプレイデバイスコンテキストは、解放する必要がありません。一度に使える共通デバイスコンテキストは最大 5 つなので、共通デバイスコンテキストを解放しないと、他のアプリケーションが共通デバイスコンテキストにアクセスできなくなることがあります。

ウィンドウクラスを登録したときに、 構造体で CS_CLASSDC、CS_OWNDC、CS_PARENTDC のいずれかのスタイルを指定していた場合、この関数は、ウィンドウクラスに所属するデバイスコンテキストのハンドルを返します。

対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h 内で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用

参照

BeginPaint, GetWindowDC, ReleaseDC,

表示: