IDCompositionDevice::CreateTargetForHwnd method (dcomp.h)

Membuat objek target komposisi yang terikat ke jendela yang diwakili oleh handel jendela (HWND) yang ditentukan.

Sintaks

HRESULT CreateTargetForHwnd(
  [in]  HWND                hwnd,
  [in]  BOOL                topmost,
  [out] IDCompositionTarget **target
);

Parameter

[in] hwnd

Jenis: HWND

Jendela tempat objek target komposisi harus terikat. Parameter ini tidak boleh NULL.

[in] topmost

Jenis: BOOL

TRUE jika pohon visual harus ditampilkan di atas anak-anak jendela yang ditentukan oleh parameter hwnd ; jika tidak, pohon visual ditampilkan di belakang anak-anak.

[out] target

Jenis: IDCompositionTarget**

Objek target komposisi baru. Parameter ini tidak boleh NULL.

Menampilkan nilai

Jenis: HRESULT

Jika fungsi berhasil, fungsi akan mengembalikan S_OK. Jika tidak, kode kesalahan HRESULT akan dikembalikan. Lihat Kode Kesalahan DirectComposition untuk daftar kode kesalahan.

Keterangan

Pohon visual Microsoft DirectComposition harus terikat ke jendela sebelum apa pun dapat ditampilkan di layar. Jendela dapat berupa jendela tingkat atas atau jendela anak. Dalam kedua kasus, jendela dapat menjadi jendela berlapis, tetapi dalam semua kasus jendela harus termasuk dalam proses panggilan. Jika jendela termasuk dalam proses yang berbeda, metode ini mengembalikan DCOMPOSITION_ERROR_ACCESS_DENIED.

Ketika konten DirectComposition terdiri ke jendela, konten selalu terdiri di atas apa pun yang digambar langsung ke jendela tersebut melalui konteks perangkat (HDC) yang dikembalikan oleh fungsi GetDC , atau dengan panggilan ke metode Microsoft DirectX Present . Namun, karena aturan kliping jendela berlaku untuk konten DirectComposition, jika jendela memiliki jendela anak, jendela anak tersebut dapat mengklip pohon visual. Parameter paling atas menentukan apakah jendela anak mengklip pohon visual.

Secara konseptual, setiap jendela terdiri dari empat lapisan:

  1. Konten yang digambar langsung ke gagang jendela (ini adalah lapisan terbawah).
  2. Pohon visual DirectComposition opsional.
  3. Isi semua jendela anak, jika ada.
  4. Pohon visual DirectComposition opsional lainnya (ini adalah lapisan paling atas).
Keempat lapisan dipotong ke wilayah jendela yang terlihat.

Paling banyak, hanya dua target komposisi yang dapat dibuat untuk setiap jendela dalam sistem, satu paling atas dan satu tidak paling atas. Jika target komposisi sudah terikat ke jendela yang ditentukan pada lapisan yang ditentukan, metode ini gagal. Ketika objek target komposisi dihancurkan, lapisan yang disusurnya tersedia untuk digunakan oleh objek target komposisi baru.

Contoh

Contoh berikut membuat dan menginisialisasi objek perangkat, lalu mengikat objek perangkat ke jendela target komposisi.

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

Persyaratan

   
Klien minimum yang didukung Windows 8 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2012 [hanya aplikasi desktop]
Target Platform Windows
Header dcomp.h
Pustaka Dcomp.lib
DLL Dcomp.dll

Lihat juga

Jendela Target Komposisi

IDCompositionDevice

IDCompositionTarget

IDCompositionTarget::SetRoot

IDCompositionVisual