Freigeben über


Clipping (DirectComposition)

Hinweis

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

Clipping bietet eine Möglichkeit, nur einen Teil einer visuellen oder visuellen Struktur anzuzeigen, indem sie das Rendern der visuellen oder Struktur auf einen bestimmten rechteckigen Bereich beschränken. In diesem Thema wird die Unterstützung von Microsoft DirectComposition für Visuals beschrieben. Er enthält folgende Abschnitte:

Clip rechteck

Ein visuelles Objekt verfügt über eine Clip-Eigenschaft, die einen rechteckigen Bereich oder ein Clip-Rechteck innerhalb des Bitmapinhalts des Visuellen definiert. Wenn das Visuelle auf dem Bildschirm gerendert wird, wird nur der Teil des Bitmapinhalts, der sich innerhalb des Cliprechtecks befindet, auf dem Bildschirm gezeichnet, während der Inhalt, der sich außerhalb des Cliprechtecks erstreckt (nicht gezeichnet). Standardmäßig enthält die Clip-Eigenschaft alle Bitmapinhalte.

Die Clip-Eigenschaft eines Visuals gilt für alle untergeordneten und absteigenden Visuellen. Mit anderen Worten, alle untergeordneten oder absteigenden Inhalte, die außerhalb der Grenzen des Cliprechtecks des übergeordneten Elements fallen, werden ebenfalls geclippt.

DirectComposition wendet die Clip-Eigenschaft an, bevor die Eigenschaften OffsetX, OffsetY und 2D Transform angewendet werden, aber nach dem Anwenden der Eigenschaften "Effekt" und "3D Transform". Dies bedeutet, dass 2D-Transformationen, OffsetX und OffsetY sowohl den visuellen Inhalt als auch das Cliprechteck beeinflussen. Während 3D-Transformationen und Effekte nicht auf das Cliprechteck angewendet werden.

Wenn Sie beispielsweise eine Offset- oder 2D-Transformation anwenden, wird das Cliprechteck von der Transformationsmatrix betroffen. So führt das Hinzufügen eines Offsets und einer 2D-Drehung (45 Grad) zusammen mit einem abgerundeten Eckcliprechteck dazu:

diagram of showing the effect of a 2d transform on a clip rectangle.

Beim Anwenden einer 3D-Transformation "innerhalb" des Cliprechtecks ist das Cliprechteck nicht von der Transformationsmatrix betroffen. Auch wenn eine Drehung um die Z-Achse angewendet wird (effektiv wie das vorherige Beispiel), ist das folgende Diagramm das Ergebnis:

diagram showing that a 3d transform doesn't affect the rectangle clip (visual rotates within the clip).

Beachten Sie, dass das Visuelle innerhalb des Clip gedreht wird, da die 3D-Matrix nicht auf den Clip selbst angewendet wird.

Wenn die Clip-Eigenschaft auf ein leeres Rechteck festgelegt ist, wird das Visuelle vollständig abgeschnitten; das heißt, das Visuelle wird in der visuellen Struktur enthalten, aber es wird nichts gerendert. Wenn Sie kein bestimmtes Visuelles in eine Komposition einschließen möchten, entfernen Sie das Visuelle aus der visuellen Struktur, anstatt ein leeres Cliprechteck festzulegen. Entfernen der visuellen Ergebnisse in einer besseren Leistung.

Sie legen die Clip-Eigenschaft einer visuellen Eigenschaft mithilfe der IDCompositionVisual::SetClip-Methode fest. Diese Methode enthält Überladungen, mit denen Sie den Wert der Clip-Eigenschaft auf ein statisches Rechteck oder auf ein Clipobjekt festlegen können. Verwenden Sie ein statisches Rechteck, wenn Sie die Abmessungen des Cliprechtecks während der Lebensdauer des Visuellen nicht ändern müssen. Wenn Sie die Dimensionen ändern oder das Cliprechteck animieren müssen, verwenden Sie ein Clipobjekt.

Clip-Objekt

Ein Clipobjekt ist ein Component-Objektmodell (COM), das ein Cliprechteck darstellt. Sie erstellen ein Clipobjekt mithilfe der IDCompositionDevice::CreateRectangleClip-Methode , und verwenden Sie dann die IDCompositionRectangleClip-Schnittstelle des Objekts, um die Eigenschaften des Objekts festzulegen. Ein neu erstelltes Clipobjekt verfügt über die Mindestwerte für die Eigenschaften "Links" und "Top" und die maximal möglichen Werte für die Eigenschaften "Rechts" und "Unten", wodurch es ein No-op-Clip-Objekt ist. Mit anderen Worten, das Objekt stellt ein Cliprechteck dar, das den gesamten Bitmapinhalt eines visuellen Elements enthält.

Ein Clipobjekt enthält einen Satz von Eigenschaften, mit denen Sie gerundete Ecken für das Clipobjekt angeben können. Mit den Eigenschaften können Sie den x-Radius und den y-Radius jeder Ecke des Clippingobjekts festlegen.

Animiertes Cliprechteck

Sie können ein Cliprechteck animieren, indem Sie Animationsobjekte links, oben, rechts und unten eines Clipobjekts anwenden. Verwenden Sie die überladene IDCompositionVisual::SetClip(IDCompositionClip) überladene Methode, um das animierte Clip-Rechteck auf die Clip-Eigenschaft eines visuellen Elements anzuwenden.

Weitere Informationen zu Animationsobjekten finden Sie unter Animation.

DirectComposition-Konzepte

So wird's machen: Clip mit einem Rechteckclipobjekt