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 |