Dela via


Så här klipper du med ett rektangelklippobjekt

Notis

För appar i Windows 10 rekommenderar vi att du använder API:er för Windows.UI.Composition i stället för DirectComposition. Mer information finns i Modernisera din skrivbordsapp med hjälp av visualiseringsskiktet.

Det här avsnittet visar hur du använder ett rektangelklippobjekt för att klippa ut ett visuellt eller visuellt träd.

Exemplet i det här avsnittet definierar ett rektangulärt klipp som är centrerat på musplatsen och tillämpar klippet på ett visuellt objekt som är centrerat i klientområdet i målfönstret för sammansättning. Den här skärmbilden visar resultatet av att tillämpa rektangelklippsobjektet på det visuella objektet.

resultat av att ett rektangelklippsobjekt har tillämpats på ett visuellt objekt

Vad du behöver veta

Teknologier

Förutsättningar

  • C/C++
  • Microsoft Win32
  • Komponentobjektmodell (COM)

Instruktioner

Steg 1: Initiera DirectComposition-objekt

  1. Skapa enhetsobjektet och målobjektet för sammansättning.
  2. Skapa ett visuellt objekt, ange dess innehåll och lägg till det i det visuella trädet.

Mer information finns i Initiera DirectComposition-.

Steg 2: Skapa rektangelklippsobjektet

Använd metoden IDCompositionDevice::CreateRectangleClip för att skapa en instans av rektangelklippsobjektet.

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

Steg 3: Ange egenskaperna för rektangelklippsobjektet

Anropa metoderna för rektangelklippobjektets IDCompositionRectangleClip-gränssnittet för att ange egenskaperna för klipprektangeln.

I följande exempel definieras en klipprektangel som är centrerad kring den aktuella musplatsen. m_offsetX- och m_offsetY medlemsvariablerna innehåller värdena för egenskaperna OffsetX och OffsetY för det visuella objektet.

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

Observera att IDCompositionRectangleClip-gränssnittet innehåller följande metoder för att definiera en klipprektangel som har rundade hörn:

Steg 4: Ange Clip-egenskapen för det visuella objektet.

Använd metoden IDCompositionVisual::SetClip för att associera clip-egenskapen för det visuella objektet med det rektangelklippsobjektet.

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

Steg 5: Spara kompositionen

Anropa metoden IDCompositionDevice::Commit för att skicka en sats av kommandon till Microsoft DirectComposition för bearbetning. Resultatet av att tillämpa klipprektangeln visas i målfönstret.

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

Steg 6: Frigör DirectComposition-objekten

Se till att frigöra rektangelns klippobjekt, enhetsobjektet, målobjektet för sammansättning och alla visuella objekt när du inte längre behöver dem. I följande exempel anropas det programdefinierade SafeRelease makro för att frigöra DirectComposition-objekten.

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

Urklipp