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 つのレイヤーで構成されます。

  1. ウィンドウ ハンドルに直接描画されるコンテンツ (これは最も下部のレイヤーです)。
  2. オプションの DirectComposition ビジュアル ツリー。
  3. すべての子ウィンドウの内容 (存在する場合)。
  4. もう 1 つのオプションの DirectComposition ビジュアル ツリー (これは最上位レイヤーです)。
4 つのレイヤーはすべて、ウィンドウの表示領域にクリップされます。

システム内のウィンドウごとに作成できるコンポジション ターゲットは、最大で 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

関連項目

コンポジション ターゲット ウィンドウ

IDCompositionDevice

IDCompositionTarget

IDCompositionTarget::SetRoot

IDCompositionVisual