IDCompositionDevice::CreateTargetForHwnd 메서드(dcomp.h)

지정된 창 핸들(HWND)로 표시되는 창에 바인딩된 컴퍼지션 대상 개체를 만듭니다.

구문

HRESULT CreateTargetForHwnd(
  [in]  HWND                hwnd,
  [in]  BOOL                topmost,
  [out] IDCompositionTarget **target
);

매개 변수

[in] hwnd

형식: HWND

컴퍼지션 대상 개체를 바인딩해야 하는 창입니다. 이 매개 변수는 NULL이 아니어야 합니다.

[in] topmost

형식: BOOL

TRUE이면 hwnd 매개 변수로 지정된 창의 자식 위에 시각적 트리를 표시해야 합니다. 그렇지 않으면 시각적 트리가 자식 뒤에 표시됩니다.

[out] target

형식: IDCompositionTarget**

새 컴퍼지션 대상 개체입니다. 이 매개 변수는 NULL이 아니어야 합니다.

반환 값

형식: HRESULT

함수가 성공하면 S_OK를 반환합니다. 그러지 않으면 HRESULT 오류 코드를 반환합니다. 오류 코드 목록은 DirectComposition 오류 코드를 참조하세요.

설명

화면에 표시하려면 먼저 Microsoft DirectComposition 시각적 트리를 창에 바인딩해야 합니다. 창은 최상위 창 또는 자식 창일 수 있습니다. 두 경우 모두 창은 계층화된 창일 수 있지만 모든 경우에 창은 호출 프로세스에 속해야 합니다. 창이 다른 프로세스에 속하는 경우 이 메서드는 DCOMPOSITION_ERROR_ACCESS_DENIED 반환합니다.

DirectComposition 콘텐츠가 창에 구성되면 콘텐츠는 GetDC 함수에서 반환된 디바이스 컨텍스트(HDC)를 통해 또는 Microsoft DirectX Present 메서드 호출을 통해 해당 창에 직접 그려지는 내용 위에 항상 구성됩니다. 그러나 창 클리핑 규칙이 DirectComposition 콘텐츠에 적용되므로 창에 자식 창이 있는 경우 해당 자식 창이 시각적 트리를 클리핑할 수 있습니다. 맨 위 매개 변수는 자식 창이 시각적 트리를 클립하는지 여부를 결정합니다.

개념적으로 각 창은 네 개의 레이어로 구성됩니다.

  1. 창 핸들에 직접 그려진 내용입니다(맨 아래 계층임).
  2. 선택적 DirectComposition 시각적 트리입니다.
  3. 모든 자식 창의 내용(있는 경우)입니다.
  4. 또 다른 선택적 DirectComposition 시각적 트리(최상위 계층)입니다.
네 개의 레이어가 모두 창의 표시되는 영역으로 잘립니다.

최대 두 개의 컴퍼지션 대상만 시스템의 각 창에 대해 만들 수 있습니다. 하나는 최상위이고 하나는 최상위가 아닙니다. 컴퍼지션 대상이 지정된 계층의 지정된 창에 이미 바인딩된 경우 이 메서드는 실패합니다. 컴퍼지션 대상 개체가 제거되면 구성한 레이어를 새 컴퍼지션 대상 개체에서 사용할 수 있습니다.

예제

다음 예제에서는 디바이스 개체를 만들고 초기화한 다음 디바이스 개체를 컴퍼지션 대상 창에 바인딩합니다.

#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
라이브러리 Dcomp.lib
DLL Dcomp.dll

추가 정보

컴퍼지션 대상 창

IDCompositionDevice

IDCompositionTarget

IDCompositionTarget::SetRoot

IDCompositionVisual