ID2D1HwndRenderTarget インターフェイス
描画命令をウィンドウにレンダリングします。
実装するタイミング
カスタム実装はサポートされません。
メンバー
ID2D1HwndRenderTarget インターフェイス の継承元は次のとおりです: ID2D1RenderTarget. ID2D1HwndRenderTarget は次のメンバーも定義します:
- メソッド
メソッド
ID2D1HwndRenderTarget インターフェイス は次の項目を定義します: メソッド.
メソッド | 説明 |
---|---|
CheckWindowState | このレンダー ターゲットに関連付けられた HWND が妨げられているかどうかを示します。 |
GetHwnd | このレンダー ターゲットに関連付けられた HWND を返します。 |
Resize | レンダー ターゲットのサイズを、指定されたピクセル サイズに変更します (オーバーロードは 2 つ)。 |
解説
他のレンダー ターゲットの場合と同様に、描画コマンドを発行する前に BeginDraw を呼び出す必要があります。描画が完了したら、EndDraw を呼び出して描画が完了したことを示し、バッファーへのアクセスを解放してレンダー ターゲットを戻します。ID2D1HwndRenderTarget では、BeginDraw の副作用は、描画コマンドを発行できるようにレンダー ターゲットの状態が変更されることだけです。EndDraw は、バッチ処理されたすべての描画コマンドをフラッシュします。エラーが発生しなかった場合、このメソッドはバッファーも表示します。このバッファーは関連付けられたウィンドウに表示されます。最後に、EndDraw は、描画または表示で発生した最初のエラーの HRESULT、およびエラーが発生した時点のタグ状態を返します。
ID2D1HwndRenderTarget オブジェクトはダブル バッファーされるため、発行された描画コマンドはすぐに表示されるのではなく、オフスクリーン サーフェイスで実行されます。EndDraw が呼び出されると、レンダリング エラーが発生していない場合は、オフスクリーン バッファーが表示されます。EndDraw によってフラッシュされたバッチでレンダリング エラーが発生した場合、バッファーは表示されないため、アプリケーションは BeginDraw を呼び出してフレームを再描画する必要があります。エラーに関係なくアプリケーションでフレームを表示する場合、Flush を使用すると、EndDraw を呼び出す前にエラーがあるかどうかをチェックできます。
ハードウェア レンダー ターゲットのバック バッファーは、GetPixelSize によって指定されたサイズです。EndDraw がバッファーを表示する場合、このビットマップは、バッファーが表示されるサーフェイス (ウィンドウのクライアント領域全体) を含むように拡大されます。この拡大は、レンダー ターゲットがハードウェアにレンダリングされる場合はバイリニア フィルタリングを使用して行われ、レンダー ターゲットがソフトウェアを使用している場合はニアレストネイバー フィルタリングを使用して行われます (通常、アプリケーションは Resize を呼び出して、レンダー ターゲットのピクセル サイズと出力先のピクセル サイズが一致し、スケーリングが不要になるようにしますが、これは要件ではありません)。
ウィンドウが複数のアダプターにまたがる場合、Direct2D では、オフスクリーン レンダー ターゲットの一部が、レンダリングが行われているアダプターから、コンテンツを表示する必要があるアダプターにコピーされるようにします。レンダー ターゲットが存在するアダプターが削除された場合またはアプリケーションの実行中にドライバーがアップグレードされた場合、これは EndDraw 呼び出しのエラーとして返されます。この場合、アプリケーションは、必要に応じて、新しいレンダー ターゲットとリソースを作成する必要があります。
ID2D1HwndRenderTarget オブジェクトの作成
ID2D1HwndRenderTarget を作成するには、ID2D1Factory::CreateHwndRenderTarget メソッドを使用します。
アプリケーションでは、一度レンダー ターゲットを作成したら、アプリケーションが有効な間またはレンダー ターゲットの EndDraw メソッドから D2DERR_RECREATE_TARGET エラーが返されるまでは、そのターゲットを保持する必要があります。このエラーが発生すると、レンダー ターゲット (およびレンダー ターゲットによって作成されたすべてのリソース) を作成し直す必要があります。
例
次の例では、CreateHwndRenderTarget メソッドを使用して ID2D1HwndRenderTarget を作成します。
RECT rc;
GetClientRect(m_hwnd, &rc);
D2D1_SIZE_U size = D2D1::SizeU(
rc.right - rc.left,
rc.bottom - rc.top
);
// Create a Direct2D render target.
hr = m_pD2DFactory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(m_hwnd, size),
&m_pRenderTarget
);
次の例では、ID2D1HwndRenderTarget を使用して、ウィンドウにテキストを描画します。
// Called whenever the application needs to display the client
// window. This method writes "Hello, World"
//
// Note that this function will automatically discard device-specific
// resources if the Direct3D device disappears during function
// invocation, and will recreate the resources the next time it's
// invoked.
//
HRESULT DemoApp::OnRender()
{
HRESULT hr;
hr = CreateDeviceResources();
if (SUCCEEDED(hr))
{
static const WCHAR sc_helloWorld[] = L"Hello, World!";
// Retrieve the size of the render target.
D2D1_SIZE_F renderTargetSize = m_pRenderTarget->GetSize();
m_pRenderTarget->BeginDraw();
m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
m_pRenderTarget->DrawText(
sc_helloWorld,
ARRAYSIZE(sc_helloWorld) - 1,
m_pTextFormat,
D2D1::RectF(0, 0, renderTargetSize.width, renderTargetSize.height),
m_pBlackBrush
);
hr = m_pRenderTarget->EndDraw();
if (hr == D2DERR_RECREATE_TARGET)
{
hr = S_OK;
DiscardDeviceResources();
}
}
return hr;
}
この例では、コードが省略されています。完全なサンプルについては、「"Hello, World" サンプル」を参照してください。
要件
クライアントの最小要件 |
Windows 7, Windows Vista SP2 および Windows Vista 用のプラットフォーム更新プログラム |
サーバーの最小要件 |
Windows Server 2008 R2, Windows Server 2008 SP2 および Windows Server 2008 用のプラットフォーム更新プログラム |
ヘッダー |
D2d1.h |
ライブラリ |
D2d1.lib |
DLL |
D2d1.dll |