Beschneiden mit einem Rechteckclipobjekt

Hinweis

Für Apps auf Windows 10 empfehlen wir die Verwendung von Windows.UI.Composition-APIs anstelle von DirectComposition. Weitere Informationen finden Sie unter Modernisieren Ihrer Desktop-App mithilfe der visuellen Ebene.

In diesem Thema wird veranschaulicht, wie ein Rechteckclipobjekt verwendet wird, um eine visuelle Struktur zu beschneiden.

Das Beispiel in diesem Thema definiert einen rechteckigen Clip, der an der Mausposition zentriert ist, und wendet den Clip auf ein Visual an, das im Clientbereich des Kompositionszielfensters zentriert ist. Dieser Screenshot zeigt das Ergebnis der Anwendung des Rechteckclipobjekts auf das Visual.

Ergebnis der Anwendung eines Rechteckclipobjekts auf ein Visual

Wichtige Informationen

Technologien

Voraussetzungen

  • C/C++
  • Microsoft Win32
  • Component Object Model (COM)

Instructions

Schritt 1: Initialisieren von DirectComposition-Objekten

  1. Erstellen Sie das Geräteobjekt und das Kompositionszielobjekt.
  2. Erstellen Sie ein Visual, legen Sie dessen Inhalt fest, und fügen Sie es der visuellen Struktur hinzu.

Weitere Informationen finden Sie unter Initialisieren von DirectComposition.

Schritt 2: Erstellen des Rechteckclipobjekts

Verwenden Sie die IDCompositionDevice::CreateRectangleClip-Methode, um eine Instanz des Rechteckclipobjekts zu erstellen.

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

Schritt 3: Festlegen der Eigenschaften des Rechteckclipobjekts

Rufen Sie die Methoden der IDCompositionRectangleClip-Schnittstelle des Rechteckclipobjekts auf, um die Eigenschaften des Cliprechtecks festzulegen.

Im folgenden Beispiel wird ein Cliprechteck definiert, das um die aktuelle Mausposition zentriert ist. Die m_offsetX m_offsetY Membervariablen und enthalten die Werte der OffsetX- und OffsetY-Eigenschaften des Visuals.

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

Beachten Sie, dass die IDCompositionRectangleClip-Schnittstelle die folgenden Methoden zum Definieren eines Cliprechtecks mit abgerundeten Ecken enthält:

Schritt 4: Festlegen der Clip-Eigenschaft des Visuals

Verwenden Sie die IDCompositionVisual::SetClip-Methode, um die Clip-Eigenschaft des Visuals dem Rechteckclipobjekt zuzuordnen.

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

Schritt 5: Committen der Komposition

Rufen Sie die IDCompositionDevice::Commit-Methode auf, um den Befehlsbatch zur Verarbeitung an Microsoft DirectComposition zu committen. Das Ergebnis der Anwendung des Cliprechtecks wird im Zielfenster angezeigt.

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

Schritt 6: Freigeben der DirectComposition-Objekte

Stellen Sie sicher, dass Sie das Rechteckclipobjekt freigeben, wenn Sie es nicht mehr benötigen, sowie das Geräteobjekt, das Kompositionszielobjekt und alle visuellen Objekte. Im folgenden Beispiel wird das anwendungsdefinierte SafeRelease-Makro zum Freigeben der DirectComposition-Objekte aufrufen.

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

Freistellen