IDCompositionDevice::CreateTargetForHwnd, méthode (dcomp.h)

Crée un objet cible de composition lié à la fenêtre représentée par le handle de fenêtre (HWND) spécifié.

Syntaxe

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

Paramètres

[in] hwnd

Type : HWND

Fenêtre à laquelle l’objet cible de composition doit être lié. Ce paramètre ne doit pas avoir la valeur NULL.

[in] topmost

Type : BOOL

TRUE si l’arborescence visuelle doit être affichée au-dessus des enfants de la fenêtre spécifiée par le paramètre hwnd ; sinon, l’arborescence visuelle s’affiche derrière les enfants.

[out] target

Type : IDCompositionTarget**

Nouvel objet cible de composition. Ce paramètre ne doit pas avoir la valeur NULL.

Valeur retournée

Type : HRESULT

Si la fonction réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT. Pour obtenir la liste des codes d’erreur, consultez Codes d’erreur DirectComposition .

Notes

Une arborescence visuelle Microsoft DirectComposition doit être liée à une fenêtre pour que tout puisse être affiché à l’écran. La fenêtre peut être une fenêtre de niveau supérieur ou une fenêtre enfant. Dans les deux cas, la fenêtre peut être une fenêtre en couches, mais dans tous les cas, la fenêtre doit appartenir au processus appelant. Si la fenêtre appartient à un autre processus, cette méthode retourne DCOMPOSITION_ERROR_ACCESS_DENIED.

Lorsque le contenu DirectComposition est composé dans la fenêtre, le contenu est toujours composé par-dessus tout ce qui est dessiné directement dans cette fenêtre par le biais du contexte d’appareil (HDC) retourné par la fonction GetDC , ou par des appels aux méthodes Microsoft DirectX Present . Toutefois, étant donné que les règles de découpage de fenêtre s’appliquent au contenu DirectComposition, si la fenêtre a des fenêtres enfants, ces fenêtres enfants peuvent couper l’arborescence visuelle. Le paramètre le plus haut détermine si les fenêtres enfants coupent l’arborescence visuelle.

D’un point de vue conceptuel, chaque fenêtre se compose de quatre couches :

  1. Contenu dessiné directement dans la poignée de fenêtre (il s’agit de la couche la plus inférieure).
  2. Arborescence visuelle DirectComposition facultative.
  3. Contenu de toutes les fenêtres enfants, le cas échéant.
  4. Une autre arborescence de visuels DirectComposition facultative (il s’agit de la couche la plus haute).
Les quatre calques sont coupés dans la région visible de la fenêtre.

Au maximum, seules deux cibles de composition peuvent être créées pour chaque fenêtre du système, l’une la plus haute et l’autre non la plus haute. Si une cible de composition est déjà liée à la fenêtre spécifiée au niveau de la couche spécifiée, cette méthode échoue. Lorsqu’un objet cible de composition est détruit, la couche qu’il a composée est disponible pour une utilisation par un nouvel objet cible de composition.

Exemples

L’exemple suivant crée et initialise un objet d’appareil, puis lie l’objet d’appareil à une fenêtre cible de composition.

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

Spécifications

   
Client minimal pris en charge Windows 8 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau uniquement]
Plateforme cible Windows
En-tête dcomp.h
Bibliothèque Dcomp.lib
DLL Dcomp.dll

Voir aussi

Fenêtre Cible de composition

IDCompositionDevice

IDCompositionTarget

IDCompositionTarget::SetRoot

IDCompositionVisual