Compartir a través de


Método IDCompositionDevice::CreateTargetForHwnd (dcomp.h)

Crea un objeto de destino de composición enlazado a la ventana representada por el identificador de ventana especificado (HWND).

Sintaxis

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

Parámetros

[in] hwnd

Tipo: HWND

Ventana a la que se debe enlazar el objeto de destino de composición. Este parámetro no debe ser null.

[in] topmost

Tipo: BOOL

TRUE si el árbol visual debe mostrarse encima de los elementos secundarios de la ventana especificada por el parámetro hwnd ; de lo contrario, el árbol visual se muestra detrás de los elementos secundarios.

[out] target

Tipo: IDCompositionTarget**

Nuevo objeto de destino de composición. Este parámetro no debe ser null.

Valor devuelto

Tipo: HRESULT

Si la función se ejecuta correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT. Consulte Códigos de error de DirectComposition para obtener una lista de códigos de error.

Comentarios

Un árbol visual de Microsoft DirectComposition debe enlazarse a una ventana antes de que se pueda mostrar algo en pantalla. La ventana puede ser una ventana de nivel superior o una ventana secundaria. En cualquier caso, la ventana puede ser una ventana superpuesta, pero en todos los casos la ventana debe pertenecer al proceso de llamada. Si la ventana pertenece a un proceso diferente, este método devuelve DCOMPOSITION_ERROR_ACCESS_DENIED.

Cuando el contenido de DirectComposition se compone en la ventana, el contenido siempre se compone sobre todo lo que se dibuja directamente en esa ventana a través del contexto del dispositivo (HDC) devuelto por la función GetDC o por llamadas a los métodos Microsoft DirectX Present . Sin embargo, dado que las reglas de recorte de ventana se aplican al contenido de DirectComposition, si la ventana tiene ventanas secundarias, esas ventanas secundarias pueden recortar el árbol visual. El parámetro superior determina si las ventanas secundarias recortan el árbol visual.

Conceptualmente, cada ventana consta de cuatro capas:

  1. El contenido dibujado directamente en el identificador de ventana (es la capa más baja).
  2. Un árbol visual DirectComposition opcional.
  3. El contenido de todas las ventanas secundarias, si las hay.
  4. Otro árbol visual DirectComposition opcional (es la capa superior).
Las cuatro capas se recortan en la región visible de la ventana.

Como máximo, solo se pueden crear dos destinos de composición para cada ventana del sistema, uno más arriba y uno no superior. Si un destino de composición ya está enlazado a la ventana especificada en la capa especificada, se produce un error en este método. Cuando se destruye un objeto de destino de composición, la capa compuesta está disponible para su uso por un nuevo objeto de destino de composición.

Ejemplos

En el ejemplo siguiente se crea e inicializa un objeto de dispositivo y, a continuación, se enlaza el objeto de dispositivo a una ventana de destino de composición.

#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;
}

Requisitos

   
Cliente mínimo compatible Windows 8 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2012 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado dcomp.h
Library Dcomp.lib
Archivo DLL Dcomp.dll

Consulte también

Ventana de destino de composición

IDCompositionDevice

IDCompositionTarget

IDCompositionTarget::SetRoot

IDCompositionVisual