Partager via


Comment cliper avec un objet clip rectangle

Notes

Pour les applications sur Windows 10, nous vous recommandons d’utiliser les API Windows.UI.Composition au lieu de DirectComposition. Pour plus d’informations, consultez Moderniser votre application de bureau à l’aide de la couche Visual.

Cette rubrique montre comment utiliser un objet clip rectangle pour couper un visuel ou une arborescence visuelle.

L’exemple de cette rubrique définit un clip rectangulaire centré à l’emplacement de la souris et applique le clip à un visuel centré dans la zone cliente de la fenêtre cible de composition. Cette capture d’écran montre le résultat de l’application de l’objet clip rectangle au visuel.

résultat de l’application d’un objet clip rectangle à un visuel

Bon à savoir

Technologies

Prérequis

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

Instructions

Étape 1 : Initialiser des objets DirectComposition

  1. Créez l’objet d’appareil et l’objet cible de composition.
  2. Créez un visuel, définissez son contenu et ajoutez-le à l’arborescence visuelle.

Pour plus d’informations, consultez Comment initialiser DirectComposition.

Étape 2 : Créer l’objet clip rectangle

Utilisez la méthode IDCompositionDevice::CreateRectangleClip pour créer un instance de l’objet clip rectangle.

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

Étape 3 : Définir les propriétés de l’objet clip rectangle

Appelez les méthodes de l’interface IDCompositionRectangleClip de l’objet clip rectangle pour définir les propriétés du rectangle de clip.

L’exemple suivant définit un rectangle d’clip centré autour de l’emplacement actuel de la souris. Les m_offsetX variables membres et m_offsetY contiennent les valeurs des propriétés OffsetX et OffsetY du visuel.

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

Notez que l’interface IDCompositionRectangleClip inclut les méthodes suivantes pour définir un rectangle d’élément avec des coins arrondis :

Étape 4 : Définir la propriété Clip du visuel

Utilisez la méthode IDCompositionVisual::SetClip pour associer la propriété Clip du visuel à l’objet clip rectangle.

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

Étape 5 : Valider la composition

Appelez la méthode IDCompositionDevice::Commit pour valider le lot de commandes sur Microsoft DirectComposition pour traitement. Le résultat de l’application du rectangle de clip apparaît dans la fenêtre cible.

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

Étape 6 : Libérer les objets DirectComposition

Veillez à libérer l’objet clip rectangle lorsque vous n’en avez plus besoin, ainsi que l’objet d’appareil, l’objet cible de composition et tous les objets visuels. L’exemple suivant appelle la macro SafeRelease définie par l’application pour libérer les objets DirectComposition.

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

Découpage