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

Crée un objet wrapper qui représente la rastérisation d’une fenêtre en couches et qui peut être associé à un visuel pour la composition.

Syntaxe

HRESULT CreateSurfaceFromHwnd(
  HWND     hwnd,
  IUnknown **surface
);

Paramètres

hwnd

Type : [in] HWND

Handle de la fenêtre en couches pour laquelle créer un wrapper. Une fenêtre en couches est créée en spécifiant WS_EX_LAYERED lors de la création de la fenêtre avec la fonction CreateWindowEx ou en définissant WS_EX_LAYERED via SetWindowLong après la création de la fenêtre.

surface

Type : [out] IUnknown**

Nouvel objet de surface de composition. Ce paramètre ne doit pas être 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 .

Remarques

Vous pouvez utiliser le pointeur de surface dans les appels à la méthode IDCompositionVisual ::SetContent pour définir le contenu d’un ou de plusieurs visuels. Après avoir défini le contenu, les visuels composent le contenu de la fenêtre en couche spécifiée tant que la fenêtre est en couches. Si la fenêtre est non superposée, le contenu de la fenêtre disparaît de la sortie de l’arborescence de composition. Si la fenêtre est ensuite redimensionnée, le contenu de la fenêtre réapparaît tant qu’il est toujours associé à un visuel.

Si la fenêtre est redimensionnée, les visuels affectés sont re-composés.

Le contenu de la fenêtre n’est pas mis en cache au-delà de la durée de vie de la fenêtre. Autrement dit, si la fenêtre est détruite, les visuels affectés cessent de composer la fenêtre.

Si la fenêtre est déplacée hors écran ou redimensionnée à zéro, le système cesse de composer le contenu des visuels. Vous devez utiliser la fonction DwmSetWindowAttribute avec l’indicateur DWMWA_CLOAK pour « masquer » la fenêtre enfant superposée lorsque vous devez masquer la fenêtre d’origine tout en permettant au système de continuer à composer le contenu des visuels. Pour plus d’informations, consultez Guide pratique pour animer la bitmap d’une fenêtre enfant en couches et Exemple de fenêtre enfant en couches DirectComposition.

Exemples

L’extrait de code suivant crée un objet wrapper qui représente la rastérisation d’une fenêtre en couches.

HRESULT hr = S_OK;
IDCompositionVisual *pVisual = nullptr;
IUnknown *pSurface = nullptr;

// Create a visual. g_pDevice is the IDCompositionDevice pointer of a 
// device object created earlier.
hr = g_pDevice->CreateVisual(&pVisual);

if (SUCCEEDED(hr))
{
    // Create a surface that contains the image of the layered child 
    // window identified by the g_hwndChild window handle (HWND). 
    hr = g_pDevice->CreateSurfaceFromHwnd(g_hwndChild, &pSurface);
}

if (SUCCEEDED(hr))
{
    // Set the content of the Control child visual.
    hr = pVisual->SetContent(pSurface);
}

Configuration requise

Condition requise Valeur
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

IDCompositionDevice

IDCompositionDevice ::CreateSurface

IDCompositionDevice ::CreateSurfaceFromHandle