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 |