Compartir a través de


Método IDCompositionDevice::CreateSurfaceFromHwnd (dcomp.h)

Crea un objeto contenedor que representa la rasterización de una ventana superpuesta y que se puede asociar a un objeto visual para la composición.

Sintaxis

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

Parámetros

hwnd

Tipo: [in] HWND

Identificador de la ventana superpuesta para la que se va a crear un contenedor. Se crea una ventana superpuesta especificando WS_EX_LAYERED al crear la ventana con la función CreateWindowEx o estableciendo WS_EX_LAYERED a través de SetWindowLong una vez creada la ventana.

surface

Tipo: [out] IUnknown**

Nuevo objeto de superficie de composición. Este parámetro no debe ser null.

Valor devuelto

Tipo: HRESULT

Si la función se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT. Consulte Códigos de error de DirectComposition para obtener una lista de códigos de error.

Comentarios

Puede usar el puntero de superficie en llamadas al método IDCompositionVisual::SetContent para establecer el contenido de uno o varios objetos visuales. Después de establecer el contenido, los objetos visuales componen el contenido de la ventana superpuesta especificada siempre que la ventana esté superpuesta. Si la ventana no está en capas, el contenido de la ventana desaparece de la salida del árbol de composición. Si la ventana se vuelve a superponer posteriormente, el contenido de la ventana vuelve a aparecer siempre y cuando todavía esté asociado a un objeto visual.

Si se cambia el tamaño de la ventana, los objetos visuales afectados se vuelven a componer.

El contenido de la ventana no se almacena en caché más allá de la duración de la ventana. Es decir, si se destruye la ventana, los objetos visuales afectados dejan de componer la ventana.

Si la ventana se mueve fuera de la pantalla o cambia de tamaño a cero, el sistema deja de componer el contenido de los objetos visuales. Debe usar la función DwmSetWindowAttribute con la marca DWMWA_CLOAK para "ocultar" la ventana secundaria superpuesta cuando necesite ocultar la ventana original al permitir que el sistema siga redactando el contenido de los objetos visuales. Para obtener más información, vea Cómo animar el mapa de bits de una ventana secundaria superpuesta y el ejemplo de ventana secundaria superpuesta DirectComposition.

Ejemplos

El siguiente fragmento de código crea un objeto contenedor que representa la rasterización de una ventana superpuesta.

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

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2012 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado dcomp.h
Library Dcomp.lib
Archivo DLL Dcomp.dll

Consulte también

IDCompositionDevice

IDCompositionDevice::CreateSurface

IDCompositionDevice::CreateSurfaceFromHandle