Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
Vad du behöver veta
Teknologier
Förutsättningar
- C/C++
- Microsoft Win32
- Komponentobjektmodell (COM)
Instruktioner
Steg 1: Initiera DirectComposition-objekt
- Skapa enhetsobjektet och målobjektet för sammansättning.
- 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);
Relaterade ämnen