IDCompositionDevice::CreateTargetForHwnd メソッド (dcomp.h)
指定したウィンドウ ハンドル (HWND) で表されるウィンドウにバインドされたコンポジション ターゲット オブジェクトを作成します。
構文
HRESULT CreateTargetForHwnd(
[in] HWND hwnd,
[in] BOOL topmost,
[out] IDCompositionTarget **target
);
パラメーター
[in] hwnd
種類: HWND
コンポジション ターゲット オブジェクトのバインド先となるウィンドウ。 このパラメーターを NULL にすることはできません。
[in] topmost
種類: BOOL
hwnd パラメーターで指定されたウィンドウの子の上にビジュアル ツリーを表示する場合は TRUE。それ以外の場合は、ビジュアル ツリーが子の背後に表示されます。
[out] target
型: IDCompositionTarget**
新しい合成ターゲット オブジェクト。 このパラメーターを NULL にすることはできません。
戻り値
型: HRESULT
関数が成功した場合は、S_OK を返します。 そうでない場合は、HRESULT エラー コードを返します。 エラー コードの一覧については、「 DirectComposition エラー コード 」を参照してください。
解説
Microsoft DirectComposition ビジュアル ツリーは、画面に何かを表示する前に、ウィンドウにバインドする必要があります。 ウィンドウには、最上位のウィンドウまたは子ウィンドウを指定できます。 どちらの場合も、ウィンドウは階層化されたウィンドウにすることができますが、いずれの場合も、ウィンドウは呼び出し元のプロセスに属している必要があります。 ウィンドウが別のプロセスに属している場合、このメソッドは DCOMPOSITION_ERROR_ACCESS_DENIEDを返します。
DirectComposition コンテンツがウィンドウに対して構成されている場合、コンテンツは常に、GetDC 関数によって返されるデバイス コンテキスト (HDC) または Microsoft DirectX Present メソッドの呼び出しによって、そのウィンドウに直接描画されるものの上に構成されます。 ただし、ウィンドウのクリッピングルールは DirectComposition コンテンツに適用されるため、ウィンドウに子ウィンドウがある場合、それらの子ウィンドウはビジュアル ツリーをクリップする可能性があります。 最上位のパラメーターは、子ウィンドウがビジュアル ツリーをクリップするかどうかを決定します。
概念的には、各ウィンドウは次の 4 つのレイヤーで構成されます。
- ウィンドウ ハンドルに直接描画されるコンテンツ (これは最も下部のレイヤーです)。
- オプションの DirectComposition ビジュアル ツリー。
- すべての子ウィンドウの内容 (存在する場合)。
- もう 1 つのオプションの DirectComposition ビジュアル ツリー (これは最上位レイヤーです)。
システム内のウィンドウごとに作成できるコンポジション ターゲットは、最大で 2 つだけです。一番上に 1 つ、一番上に作成することはできません。 コンポジション ターゲットが指定したレイヤーの指定されたウィンドウに既にバインドされている場合、このメソッドは失敗します。 コンポジションターゲットオブジェクトが破棄されると、それを構成したレイヤーは新しいコンポジションターゲットオブジェクトで使用できます。
例
次の例では、デバイス オブジェクトを作成して初期化し、デバイス オブジェクトをコンポジション ターゲット ウィンドウにバインドします。
#include <dcomp.h>
#include <d3d11.h>
HRESULT InitializeDirectCompositionDevice(HWND hwndTarget,
ID3D11Device **ppD3D11Device, IDCompositionDevice **ppDevice,
IDCompositionTarget **ppCompTarget)
{
HRESULT hr = S_OK;
D3D_FEATURE_LEVEL featureLevelSupported;
IDXGIDevice *pDXGIDevice = nullptr;
// Verify that the arguments are valid.
if (hwndTarget == NULL || ppD3D11Device == nullptr || ppDevice == nullptr ||
ppCompTarget == nullptr)
{
return E_INVALIDARG;
}
// Create the D3D device object. Note that the
// D3D11_CREATE_DEVICE_BGRA_SUPPORT flag is needed for rendering
// on surfaces using Direct2D.
hr = D3D11CreateDevice(
nullptr,
D3D_DRIVER_TYPE_HARDWARE,
NULL,
D3D11_CREATE_DEVICE_BGRA_SUPPORT, // needed for rendering on surfaces using Direct2D
NULL,
0,
D3D11_SDK_VERSION,
ppD3D11Device,
&featureLevelSupported,
NULL);
if (SUCCEEDED(hr))
{
// Create the DXGI device used to create bitmap surfaces.
hr = (*ppD3D11Device)->QueryInterface(&pDXGIDevice);
}
if (SUCCEEDED(hr))
{
// Create the DirectComposition device object.
hr = DCompositionCreateDevice(pDXGIDevice, __uuidof(IDCompositionDevice),
reinterpret_cast<void **>(ppDevice));
}
if (SUCCEEDED(hr))
{
// Bind the DirectComposition device to the target window.
hr = (*ppDevice)->CreateTargetForHwnd(hwndTarget, TRUE, ppCompTarget);
}
return hr;
}
要件
サポートされている最小のクライアント | Windows 8 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2012 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | dcomp.h |
Library | Dcomp.lib |
[DLL] | Dcomp.dll |