Condividi tramite


Metodo IDCompositionDevice::CreateSurfaceFromHwnd (dcomp.h)

Crea un oggetto wrapper che rappresenta la rasterizzazione di una finestra a più livelli e che può essere associato a un oggetto visivo per la composizione.

Sintassi

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

Parametri

hwnd

Tipo: [in] HWND

Handle della finestra a più livelli per la quale creare un wrapper. Viene creata una finestra a più livelli specificando WS_EX_LAYERED durante la creazione della finestra con la funzione CreateWindowEx o impostando WS_EX_LAYERED tramite SetWindowLong dopo la creazione della finestra.

surface

Tipo: [out] IUnknown**

Nuovo oggetto superficie di composizione. Questo parametro non deve essere NULL.

Valore restituito

Tipo: HRESULT

Se la funzione ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT . Per un elenco di codici di errore, vedere Codici di errore directComposition .

Commenti

È possibile usare il puntatore di superficie nelle chiamate al metodo IDCompositionVisual::SetContent per impostare il contenuto di uno o più oggetti visivi. Dopo aver impostato il contenuto, gli oggetti visivi compongono il contenuto della finestra a più livelli specificata, purché la finestra venga sovrapposta. Se la finestra non è stata rilevata, il contenuto della finestra scompare dall'output dell'albero di composizione. Se la finestra viene ricompiata in un secondo momento, il contenuto della finestra viene nuovamente visualizzato purché sia ancora associato a un oggetto visivo.

Se la finestra viene ridimensionata, gli oggetti visivi interessati vengono ricomposti.

Il contenuto della finestra non viene memorizzato nella cache oltre la durata della finestra. Ovvero, se la finestra viene eliminata definitivamente, gli oggetti visivi interessati interrompono la composizione della finestra.

Se la finestra viene spostata fuori schermo o ridimensionata a zero, il sistema smette di comporre il contenuto degli oggetti visivi. È consigliabile usare la funzione DwmSetWindowAttribute con il flag DWMWA_CLOAK per "mascherare" la finestra figlio a più livelli quando è necessario nascondere la finestra originale, consentendo al sistema di continuare a comporre il contenuto degli oggetti visivi. Per altre informazioni, vedere How to animate the bitmap of a layered child window and DirectComposition layered child window sample .For more information, see How to animate the bitmap of a layered child windowsample and DirectComposition layered child window sample.

Esempio

Il frammento di codice seguente crea un oggetto wrapper che rappresenta la rasterizzazione di una finestra a più livelli.

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

Requisiti

Requisito Valore
Client minimo supportato Windows 8 [solo app desktop]
Server minimo supportato Windows Server 2012 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione dcomp.h
Libreria Dcomp.lib
DLL Dcomp.dll

Vedi anche

IDCompositionDevice

IDCompositionDevice::CreateSurface

IDCompositionDevice::CreateSurfaceFromHandle