Sdílet prostřednictvím


Jak vystřihnout pomocí obdélníkového klipu

Poznámka

U aplikací ve Windows 10 doporučujeme místo DirectComposition používat rozhraní API pro Windows.UI.Composition. Další informace najdete v tématu Modernizace desktopové aplikace pomocívrstvy vizuálu .

Toto téma ukazuje, jak pomocí objektu obdélníkového klipu vystřižovat vizuál nebo vizuální strom.

Příklad v tomto tématu definuje obdélníkový výřez, který je vycentrovaný na místě myši, a aplikuje výřez na vizuál, který je vycentrovaný v klientské oblasti cílového okna. Tento snímek obrazovky ukazuje výsledek použití objektu obdélníkového výstřižku na vizuál.

výsledek použití obdélníkové výseče na vizuál

Co potřebujete vědět

Technologie

Požadavky

  • C/C++
  • Microsoft Win32
  • Model objektů komponent (COM)

Instrukce

Krok 1: Inicializace objektů DirectComposition

  1. Vytvořte objekt zařízení a cílový objekt složení.
  2. Vytvořte vizuál, nastavte jeho obsah a přidejte ho do stromu vizuálu.

Další informace naleznete v tématu Jak inicializovat DirectComposition.

Krok 2: Vytvoření objektu obdélníkového klipu

Pomocí metody IDCompositionDevice::CreateRectangleClip vytvořte instanci objektu obdélníkového klipu.

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

Krok 3: Nastavení vlastností objektu obdélníkového klipu

Zavolejte metody rozhraní IDCompositionRectangleClip objektu obdélníkového klipu pro nastavení vlastností obdélníku klipu.

Následující příklad definuje ořezový obdélník, který je vycentrován kolem aktuálního umístění myši. Členské proměnné m_offsetX a m_offsetY obsahují hodnoty vlastností OffsetX a OffsetY vizuálu.

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

Všimněte si, že rozhraní IDCompositionRectangleClip obsahuje následující metody pro definování obdélníku klipu se zaoblenými rohy:

Krok 4: Nastavte vlastnost Výřez vizuálu

Pomocí metody IDCompositionVisual::SetClip přidružit vlastnost Clip vizuálu k objektu obdélníkového klipu.

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

Krok 5: Potvrzení složení

Zavolejte metodu IDCompositionDevice::Commit pro potvrzení dávky příkazů do Microsoft DirectComposition ke zpracování. Výsledek použití ořezového obdélníku se zobrazí v cílovém okně.

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

Krok 6: Uvolnění objektů DirectComposition

Pokud už nepotřebujete objekt obdélníkového klipu, nezapomeňte ho uvolnit, stejně jako objekt zařízení, kompoziční cílový objekt a všechny vizuální objekty. Následující příklad volá makro aplikací definované SafeRelease k uvolnění objektů DirectComposition.

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

výřez