Bagikan melalui


Cara membuat klip dengan objek klip persegi

Catatan

Untuk aplikasi di Windows 10, sebaiknya gunakan WINDOWS.UI.Composition API alih-alih DirectComposition. Untuk informasi selengkapnya, lihat Memodernisasi aplikasi desktop Anda menggunakan lapisan Visual.

Topik ini menunjukkan cara menggunakan objek klip persegi untuk mengklip visual atau pohon visual.

Contoh dalam topik ini mendefinisikan klip persegi panjang yang berpusat di lokasi mouse, dan menerapkan klip ke visual yang berpusat di area klien jendela target komposisi. Cuplikan layar ini memperlihatkan hasil penerapan objek klip persegi panjang ke visual.

hasil penerapan objek klip persegi panjang ke visual

Apa yang perlu Anda ketahui

Teknologi

Prasyarat

  • C/C++
  • Microsoft Win32
  • Model Objek Komponen (COM)

Petunjuk

Langkah 1: Menginisialisasi objek DirectComposition

  1. Buat objek perangkat dan objek target komposisi.
  2. Buat visual, atur kontennya, dan tambahkan ke pohon visual.

Untuk informasi selengkapnya, lihat Cara menginisialisasi DirectComposition.

Langkah 2: Buat objek klip persegi panjang

Gunakan metode IDCompositionDevice::CreateRectangleClip untuk membuat instans objek klip persegi panjang.

    HRESULT hr = S_OK;
    
    // Create the rectangle clip object.
    if (m_pClip == NULL)
    {
        hr = m_pDevice->CreateRectangleClip(&m_pClip);
    }

Langkah 3: Mengatur properti objek klip persegi panjang

Panggil metode antarmuka IDCompositionRectangleClip objek klip persegi panjang untuk mengatur properti persegi panjang klip.

Contoh berikut mendefinisikan persegi klip yang berpusat di sekitar lokasi mouse saat ini. Variabel m_offsetX anggota dan m_offsetY berisi nilai properti OffsetX dan OffsetY visual.

    if (SUCCEEDED(hr))
    {
        // Get the location of the mouse.
        POINT ptMouse = { };
        GetCursorPos(&ptMouse);
        ScreenToClient(m_hwnd, &ptMouse);

        // Create a 100-by-100 pixel rectangular clip that is 
        // centered at the mouse location, and is mapped to
        // the rectangle of the visual.
        m_pClip->SetLeft((ptMouse.x - m_offsetX) - 50.f);
        m_pClip->SetTop((ptMouse.y - m_offsetY) - 50.f);
        m_pClip->SetRight((ptMouse.x - m_offsetX) + 50.f);
        m_pClip->SetBottom((ptMouse.y - m_offsetY) + 50.f);
    }

Perhatikan bahwa antarmuka IDCompositionRectangleClip menyertakan metode berikut untuk menentukan persegi panjang klip yang memiliki sudut bulat:

Langkah 4: Atur properti Klip visual

Gunakan metode IDCompositionVisual::SetClip untuk mengaitkan properti Klip visual dengan objek klip persegi.

    if (SUCCEEDED(hr))
    {
        // Set the rectangle clip object as the Clip property 
        // of the visual.
        hr = m_pVisual->SetClip(m_pClip);
    }

Langkah 5: Terapkan komposisi

Panggil metode IDCompositionDevice::Commit untuk menerapkan batch perintah ke Microsoft DirectComposition untuk diproses. Hasil penerapan persegi klip muncul di jendela target.

    if (SUCCEEDED(hr))
    {
        // Commit the visual to be composed and displayed.
        hr = m_pDevice->Commit();  
    }

Langkah 6: Bebaskan objek DirectComposition

Pastikan untuk membebaskan objek klip persegi ketika Anda tidak lagi membutuhkannya, serta objek perangkat, objek target komposisi, dan objek visual apa pun. Contoh berikut memanggil makro SafeRelease yang ditentukan aplikasi untuk membebaskan objek DirectComposition.

    SafeRelease(&m_pClip);
    SafeRelease(&m_pDevice);
    SafeRelease(&m_pD3D11Device);
    SafeRelease(&m_pCompTarget);
    SafeRelease(&m_pVisual);
    SafeRelease(&m_pSurface);

Kliping