Antarmuka ID2D1HwndRenderTarget (d2d1.h)

Merender instruksi menggambar ke jendela.

Warisan

Antarmuka ID2D1HwndRenderTarget mewarisi dari ID2D1RenderTarget. ID2D1HwndRenderTarget juga memiliki jenis anggota ini:

Metode

Antarmuka ID2D1HwndRenderTarget memiliki metode ini.

 
ID2D1HwndRenderTarget::CheckWindowState

Menunjukkan apakah HWND yang terkait dengan target render ini dihilangkan.
ID2D1HwndRenderTarget::GetHwnd

Mengembalikan HWND yang terkait dengan target render ini.
ID2D1HwndRenderTarget::Resize

Mengubah ukuran target render ke ukuran piksel yang ditentukan. (kelebihan beban 2/2)
ID2D1HwndRenderTarget::Resize

Mengubah ukuran target render ke ukuran piksel yang ditentukan. (kelebihan beban 1/2)

Keterangan

Seperti halnya dengan target render lainnya, Anda harus memanggil BeginDraw sebelum mengeluarkan perintah gambar. Setelah Anda selesai menggambar, panggil EndDraw untuk menunjukkan bahwa gambar selesai dan untuk merilis akses ke buffer yang mendukung target render.

Untuk ID2D1HwndRenderTarget, satu-satunya efek samping BeginDraw adalah mengubah status target render untuk memungkinkan perintah menggambar dikeluarkan.

EndDraw menghapus semua perintah gambar batch. Jika tidak ada kesalahan yang terjadi, maka ia juga menyajikan buffer, menyebabkannya muncul di jendela terkait. Akhirnya, EndDraw mengembalikan HRESULT dari kesalahan pertama yang terjadi dalam menggambar atau menyajikan, serta status tag pada saat kesalahan terjadi.

Objek ID2D1HwndRenderTarget di-buffer ganda, sehingga perintah gambar yang dikeluarkan tidak segera muncul, melainkan dilakukan pada permukaan di luar layar. Ketika EndDraw dipanggil, jika belum ada kesalahan penyajian, buffer di luar layar disajikan. Jika ada kesalahan penyajian dalam batch yang dibersihkan oleh EndDraw, maka buffer tidak disajikan, dan aplikasi harus memanggil BeginDraw dan menggambar ulang bingkai. Flush dapat digunakan untuk memeriksa kesalahan sebelum memanggil EndDraw jika aplikasi ingin bingkai disajikan terlepas dari kesalahan.

Buffer back-buffer target render perangkat keras adalah ukuran yang ditentukan oleh GetPixelSize. Jika EndDraw menyajikan buffer, bitmap ini direntangkan untuk menutupi permukaan tempatnya disajikan: seluruh area klien jendela. Peregangan ini dilakukan menggunakan pemfilteran bilinear jika target render merender di perangkat keras dan menggunakan pemfilteran tetangga terdekat jika target penyajian menggunakan perangkat lunak. (Biasanya, aplikasi akan memanggil Ubah Ukuran untuk memastikan ukuran piksel target render dan ukuran piksel kecocokan tujuan, dan tidak ada penskalaan yang diperlukan, meskipun ini bukan persyaratan.)

Dalam kasus di mana jendela mengalihkan adaptor, Direct2D memastikan bahwa bagian target render di luar layar disalin dari adaptor tempat penyajian terjadi pada adaptor yang perlu menampilkan konten.

Jika adaptor target render aktif telah dihapus atau driver ditingkatkan saat aplikasi berjalan, ini dikembalikan sebagai kesalahan dalam panggilan EndDraw . Dalam hal ini, aplikasi harus membuat target render dan sumber daya baru seperlunya.

Membuat Objek ID2D1HwndRenderTarget

Untuk membuat ID2D1HwndRenderTarget, gunakan metode ID2D1Factory::CreateHwndRenderTarget .

Aplikasi Anda harus membuat target render sekali dan menahannya selama masa pakai aplikasi atau sampai metode EndDraw target render mengembalikan kesalahan D2DERR_RECREATE_TARGET . Ketika Anda menerima kesalahan ini, Anda perlu membuat ulang target render (dan sumber daya apa pun yang dibuatnya).

Contoh

Contoh berikut menggunakan metode CreateHwndRenderTarget untuk membuat ID2D1HwndRenderTarget.

RECT rc;
GetClientRect(m_hwnd, &rc);

D2D1_SIZE_U size = D2D1::SizeU(
    rc.right - rc.left,
    rc.bottom - rc.top
    );

// Create a Direct2D render target.
hr = m_pD2DFactory->CreateHwndRenderTarget(
    D2D1::RenderTargetProperties(),
    D2D1::HwndRenderTargetProperties(m_hwnd, size),
    &m_pRenderTarget
    );

Contoh berikutnya menggunakan ID2D1HwndRenderTarget untuk menggambar teks ke jendela.

//  Called whenever the application needs to display the client
//  window. This method writes "Hello, World"
//
//  Note that this function will automatically discard device-specific
//  resources if the Direct3D device disappears during function
//  invocation, and will recreate the resources the next time it's
//  invoked.
//
HRESULT DemoApp::OnRender()
{
    HRESULT hr;

    hr = CreateDeviceResources();

    if (SUCCEEDED(hr))
    {
        static const WCHAR sc_helloWorld[] = L"Hello, World!";

        // Retrieve the size of the render target.
        D2D1_SIZE_F renderTargetSize = m_pRenderTarget->GetSize();

        m_pRenderTarget->BeginDraw();

        m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());

        m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));

        m_pRenderTarget->DrawText(
            sc_helloWorld,
            ARRAYSIZE(sc_helloWorld) - 1,
            m_pTextFormat,
            D2D1::RectF(0, 0, renderTargetSize.width, renderTargetSize.height),
            m_pBlackBrush
            );

        hr = m_pRenderTarget->EndDraw();

        if (hr == D2DERR_RECREATE_TARGET)
        {
            hr = S_OK;
            DiscardDeviceResources();
        }
    }

    return hr;
}

Kode telah dihilangkan dari contoh ini.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 7, Windows Vista dengan SP2 dan Pembaruan Platform untuk Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2008 R2, Windows Server 2008 dengan SP2 dan Pembaruan Platform untuk Windows Server 2008 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header d2d1.h

Lihat juga

ID2D1RenderTarget