Freigeben über


IDCompositionDevice::CreateSurfaceFromHwnd-Methode (dcomp.h)

Erstellt ein Wrapperobjekt, das die Rasterung eines mehrstufigen Fensters darstellt und einem Visual für die Komposition zugeordnet werden kann.

Syntax

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

Parameter

hwnd

Typ: [in] HWND

Das Handle des mehrschichtigen Fensters, für das ein Wrapper erstellt werden soll. Ein mehrstufiges Fenster wird erstellt, indem WS_EX_LAYERED beim Erstellen des Fensters mit der CreateWindowEx-Funktion oder durch Festlegen WS_EX_LAYERED über SetWindowLong festgelegt wird, nachdem das Fenster erstellt wurde.

surface

Typ: [out] IUnknown**

Das neue Kompositionsoberflächenobjekt. Dieser Parameter darf nicht NULL sein.

Rückgabewert

Typ: HRESULT

Wenn die Funktion erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein Fehlercode HRESULT zurückgegeben. Eine Liste der Fehlercodes finden Sie unter DirectComposition-Fehlercodes .

Hinweise

Sie können den Surface-Zeiger in Aufrufen der IDCompositionVisual::SetContent-Methode verwenden, um den Inhalt eines oder mehrerer Visuals festzulegen. Nachdem sie den Inhalt festgelegt haben, bilden die Visuals den Inhalt des angegebenen mehrschichtigen Fensters, solange das Fenster überlappend ist. Wenn das Fenster nicht mehr gespeichert ist, wird der Fensterinhalt aus der Ausgabe der Kompositionsstruktur ausgeblendet. Wenn das Fenster später neu überschichtet wird, wird der Fensterinhalt wieder angezeigt, solange er noch einem Visual zugeordnet ist.

Wenn die Größe des Fensters geändert wird, werden die betroffenen Visuals neu zusammengesetzt.

Der Inhalt des Fensters wird nicht über die Lebensdauer des Fensters hinaus zwischengespeichert. Das heißt, wenn das Fenster zerstört wird, beenden die betroffenen Visuals das Komponieren des Fensters.

Wenn das Fenster außerhalb des Bildschirms verschoben oder die Größe auf null geändert wird, beendet das System die Zusammenstellung des Inhalts von Visuals. Sie sollten die DwmSetWindowAttribute-Funktion mit dem flag DWMWA_CLOAK verwenden, um das mehrschichtige untergeordnete Fenster zu "umschließen", wenn Sie das ursprüngliche Fenster ausblenden müssen, während das System weiterhin den Inhalt der Visuals verfassen kann. Weitere Informationen finden Sie unter How to animate the bitmap of a layered child window and DirectComposition layered child window sample.

Beispiele

Der folgende Codeausschnitt erstellt ein Wrapperobjekt, das die Rasterung eines mehrstufigen Fensters darstellt.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile dcomp.h
Bibliothek Dcomp.lib
DLL Dcomp.dll

Weitere Informationen

IDCompositionDevice

IDCompositionDevice::CreateSurface

IDCompositionDevice::CreateSurfaceFromHandle