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

Cria um objeto wrapper que representa a rasterização de uma janela em camadas e que pode ser associado a um visual para composição.

Sintaxe

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

Parâmetros

hwnd

Tipo: [in] HWND

O identificador da janela em camadas para a qual criar um wrapper. Uma janela em camadas é criada especificando WS_EX_LAYERED ao criar a janela com a função CreateWindowEx ou definindo WS_EX_LAYERED por meio de SetWindowLong após a criação da janela.

surface

Tipo: [out] IUnknown**

O novo objeto de superfície de composição. Esse parâmetro não deve ser NULL.

Retornar valor

Tipo: HRESULT

Se a função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT. Confira Códigos de erro do DirectComposition para obter uma lista de códigos de erro.

Comentários

Você pode usar o ponteiro de superfície em chamadas para o método IDCompositionVisual::SetContent para definir o conteúdo de um ou mais visuais. Depois de definir o conteúdo, os visuais compõem o conteúdo da janela em camadas especificada, desde que a janela esteja em camadas. Se a janela for descamada, o conteúdo da janela desaparecerá da saída da árvore de composição. Se a janela for recamada posteriormente, o conteúdo da janela reaparecerá, desde que ainda esteja associado a um visual.

Se a janela for redimensionada, os visuais afetados serão redimensionados.

O conteúdo da janela não é armazenado em cache além da vida útil da janela. Ou seja, se a janela for destruída, os visuais afetados param de redigir a janela.

Se a janela for movida para fora da tela ou redimensionada para zero, o sistema deixará de compor o conteúdo dos visuais. Você deve usar a função DwmSetWindowAttribute com o sinalizador DWMWA_CLOAK para "ocultar" a janela filho em camadas quando precisar ocultar a janela original, permitindo que o sistema continue a compor o conteúdo dos visuais. Para obter mais informações, consulte Como animar o bitmap de uma janela filho em camadas e Exemplo de janela filho em camadas do DirectComposition.

Exemplos

O snippet de código a seguir cria um objeto wrapper que representa a rasterização de uma janela em camadas.

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 Valor
Cliente mínimo com suporte Windows 8 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2012 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho dcomp.h
Biblioteca Dcomp.lib
DLL Dcomp.dll

Confira também

IDCompositionDevice

IDCompositionDevice::CreateSurface

IDCompositionDevice::CreateSurfaceFromHandle