Metodo IDCompositionDevice::CreateTargetForHwnd (dcomp.h)

Crea un oggetto di destinazione di composizione associato alla finestra rappresentata dall'handle di finestra specificato (HWND).

Sintassi

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

Parametri

[in] hwnd

Tipo: HWND

Finestra a cui deve essere associato l'oggetto di destinazione della composizione. Questo parametro non deve essere NULL.

[in] topmost

Tipo: BOOL

TRUE se l'albero visivo deve essere visualizzato sopra gli elementi figlio della finestra specificata dal parametro hwnd ; in caso contrario, l'albero visivo viene visualizzato dietro gli elementi figlio.

[out] target

Tipo: IDCompositionTarget**

Nuovo oggetto di destinazione della composizione. Questo parametro non deve essere NULL.

Valore restituito

Tipo: HRESULT

Se la funzione ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT . Per un elenco di codici di errore, vedere Codici di errore DirectComposition .

Commenti

Un albero visivo Microsoft DirectComposition deve essere associato a una finestra prima di poter visualizzare qualsiasi elemento sullo schermo. La finestra può essere una finestra di primo livello o una finestra figlio. In entrambi i casi, la finestra può essere una finestra a livelli, ma in tutti i casi la finestra deve appartenere al processo chiamante. Se la finestra appartiene a un processo diverso, questo metodo restituisce DCOMPOSITION_ERROR_ACCESS_DENIED.

Quando il contenuto DirectComposition è composto dalla finestra, il contenuto viene sempre composto sopra qualsiasi elemento disegnato direttamente nella finestra tramite il contesto del dispositivo restituito dalla funzione GetDC o dalle chiamate ai metodi Microsoft DirectX Present . Tuttavia, poiché le regole di ritaglio della finestra si applicano al contenuto DirectComposition, se la finestra ha finestre figlio, tali finestre figlio possono ritagliare l'albero visivo. Il parametro più alto determina se le finestre figlio ritagliano l'albero visivo.

Concettualmente, ogni finestra è costituita da quattro livelli:

  1. Il contenuto disegnato direttamente nell'handle della finestra (si tratta del livello più basso).
  2. Albero visivo DirectComposition facoltativo.
  3. Contenuto di tutte le finestre figlio, se presente.
  4. Un altro albero visivo DirectComposition facoltativo (si tratta del livello superiore).
Tutti e quattro i livelli vengono ritagliati nell'area visibile della finestra.

Al massimo, è possibile creare solo due destinazioni di composizione per ogni finestra del sistema, una superiore e una non superiore. Se una destinazione di composizione è già associata alla finestra specificata al livello specificato, questo metodo ha esito negativo. Quando un oggetto di destinazione di composizione viene distrutto, il livello composto è disponibile per l'uso da parte di un nuovo oggetto di destinazione della composizione.

Esempio

L'esempio seguente crea e inizializza un oggetto dispositivo e quindi associa l'oggetto dispositivo a una finestra di destinazione della composizione.

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

Requisiti

   
Client minimo supportato Windows 8 [solo app desktop]
Server minimo supportato Windows Server 2012 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione dcomp.h
Libreria Dcomp.lib
DLL Dcomp.dll

Vedi anche

Finestra Di destinazione composizione

IDCompositionDevice

IDCompositionTarget

IDCompositionTarget::SetRoot

IDCompositionVisual