次の方法で共有


IDXGISurface1::GetDC

GDI を使用して DXGI サーフェスにレンダリングできるようにするデバイス コンテキスト (DC) を返します。

HRESULT 
GetDC(
  BOOL Discard,
  HDC *phdc
);

パラメータ

  • Discard
    true の場合、アプリケーションは GDI によるレンダリングを保持しません。false の場合は、デバイス コンテキストに対する前回のレンダリングがすべて保持されます。デバイス コンテキストを読み取るだけで、サーフェスに対するレンダリングは実行しない場合に、このフラグは最適です。
  • phdc
    GDI レンダリングの現在のデバイス コンテキストを表す HDC ハンドルへのポインターです。

戻り値

正常に実行された場合は S_OK を返し、失敗した場合はエラー コードを返します。

解説 

GetDC メソッドを使用してデバイス コンテキストを取得すると、GDI を使用して DXGI サーフェスにレンダリングできます。GetDC メソッドは、GDI レンダリングで使用するサーフェスを用意し、DXGI テクノロジーと GDI テクノロジーどうしの相互動作を可能にします。

このメソッドを使用するときは、次の点に注意してください。

  • サーフェスの作成では、サーフェスの D3D10_RESOURCE_MISC_GDI_COMPATIBLE フラグまたはスワップ チェーンの DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE フラグを使用します。これらのフラグを使用しないと、このメソッドは失敗します。
  • 新しい Direct3D コマンドを発行する場合は、まずデバイスを解放し、IDXGISurface1::ReleaseDC メソッドを呼び出す必要があります。
  • このメソッドで作成した未処理のデバイス コンテキストが存在していると、このメソッドは失敗します。
  • サーフェスまたはスワップ チェーンのフォーマットは、DXGI_FORMAT_B8G8R8A8_UNORM_SRGB または DXGI_FORMAT_B8G8R8A8_UNORM であることが必要です。
  • GetDC では、Direct3D パイプラインの出力結合でのレンダリング ターゲットがサーフェスにバインドされていません。GDI レンダリング後、Direct3D レンダリングの前にデバイスに対して OMSetRenderTargets を呼び出す必要があります。
  • バッファーのサイズを変更する前に、未処理となっているすべてのデバイス コンテキストを解放する必要があります。

スワップ チェーンから IDXGISurface1 を取得することで、スワップ チェーンのインデックス 0 でバック バッファーに対して GetDC を呼び出すこともできます。次のコードは、このプロセスを示しています。

 IDXGISwapChain* g_pSwapChain = NULL; IDXGISurface1* g_pSurface1 = NULL; ... //Setup the device and and swapchain g_pSwapChain->GetBuffer(0, __uuidof(IDXGISurface1), (void**) &g_pSurface1); g_pSurface1->GetDC( FALSE, &g_hDC ); ...       //Draw on the DC using GDI ... //When finish drawing relase the DC g_pSurface1->ReleaseDC( NULL );       

要件

ヘッダー: DXGI.h 宣言

ライブラリ: DXGI.lib 内容

関連項目

DXGI のインターフェイス | IDXGISurface1