Metodo IDCompositionDevice::CreateTargetForHwnd (dcomp.h)
Crea un oggetto di destinazione di composizione associato alla finestra rappresentata dall'handle di finestra specificato (HWND).
Sintassi
HRESULT CreateTargetForHwnd(
[in] HWND hwnd,
[in] BOOL topmost,
[out] IDCompositionTarget **target
);
Parametri
[in] hwnd
Tipo: HWND
Finestra a cui deve essere associato l'oggetto di destinazione della composizione. Questo parametro non deve essere NULL.
[in] topmost
Tipo: BOOL
TRUE se l'albero visivo deve essere visualizzato sopra gli elementi figlio della finestra specificata dal parametro hwnd ; in caso contrario, l'albero visivo viene visualizzato dietro gli elementi figlio.
[out] target
Tipo: IDCompositionTarget**
Nuovo oggetto di destinazione della 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
Un albero visivo Microsoft DirectComposition deve essere associato a una finestra prima di poter visualizzare qualsiasi elemento sullo schermo. La finestra può essere una finestra di primo livello o una finestra figlio. In entrambi i casi, la finestra può essere una finestra a livelli, ma in tutti i casi la finestra deve appartenere al processo chiamante. Se la finestra appartiene a un processo diverso, questo metodo restituisce DCOMPOSITION_ERROR_ACCESS_DENIED.
Quando il contenuto DirectComposition è composto dalla finestra, il contenuto viene sempre composto sopra qualsiasi elemento disegnato direttamente nella finestra tramite il contesto del dispositivo restituito dalla funzione GetDC o dalle chiamate ai metodi Microsoft DirectX Present . Tuttavia, poiché le regole di ritaglio della finestra si applicano al contenuto DirectComposition, se la finestra ha finestre figlio, tali finestre figlio possono ritagliare l'albero visivo. Il parametro più alto determina se le finestre figlio ritagliano l'albero visivo.
Concettualmente, ogni finestra è costituita da quattro livelli:
- Il contenuto disegnato direttamente nell'handle della finestra (si tratta del livello più basso).
- Albero visivo DirectComposition facoltativo.
- Contenuto di tutte le finestre figlio, se presente.
- Un altro albero visivo DirectComposition facoltativo (si tratta del livello superiore).
Al massimo, è possibile creare solo due destinazioni di composizione per ogni finestra del sistema, una superiore e una non superiore. Se una destinazione di composizione è già associata alla finestra specificata al livello specificato, questo metodo ha esito negativo. Quando un oggetto di destinazione di composizione viene distrutto, il livello composto è disponibile per l'uso da parte di un nuovo oggetto di destinazione della composizione.
Esempio
L'esempio seguente crea e inizializza un oggetto dispositivo e quindi associa l'oggetto dispositivo a una finestra di destinazione della composizione.
#include <dcomp.h>
#include <d3d11.h>
HRESULT InitializeDirectCompositionDevice(HWND hwndTarget,
ID3D11Device **ppD3D11Device, IDCompositionDevice **ppDevice,
IDCompositionTarget **ppCompTarget)
{
HRESULT hr = S_OK;
D3D_FEATURE_LEVEL featureLevelSupported;
IDXGIDevice *pDXGIDevice = nullptr;
// Verify that the arguments are valid.
if (hwndTarget == NULL || ppD3D11Device == nullptr || ppDevice == nullptr ||
ppCompTarget == nullptr)
{
return E_INVALIDARG;
}
// Create the D3D device object. Note that the
// D3D11_CREATE_DEVICE_BGRA_SUPPORT flag is needed for rendering
// on surfaces using Direct2D.
hr = D3D11CreateDevice(
nullptr,
D3D_DRIVER_TYPE_HARDWARE,
NULL,
D3D11_CREATE_DEVICE_BGRA_SUPPORT, // needed for rendering on surfaces using Direct2D
NULL,
0,
D3D11_SDK_VERSION,
ppD3D11Device,
&featureLevelSupported,
NULL);
if (SUCCEEDED(hr))
{
// Create the DXGI device used to create bitmap surfaces.
hr = (*ppD3D11Device)->QueryInterface(&pDXGIDevice);
}
if (SUCCEEDED(hr))
{
// Create the DirectComposition device object.
hr = DCompositionCreateDevice(pDXGIDevice, __uuidof(IDCompositionDevice),
reinterpret_cast<void **>(ppDevice));
}
if (SUCCEEDED(hr))
{
// Bind the DirectComposition device to the target window.
hr = (*ppDevice)->CreateTargetForHwnd(hwndTarget, TRUE, ppCompTarget);
}
return hr;
}
Requisiti
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 |