Partager via


énumération D2D1_COMBINE_MODE (d2d1.h)

Spécifie les différentes méthodes par lesquelles deux géométries peuvent être combinées.

Syntax

typedef enum D2D1_COMBINE_MODE {
  D2D1_COMBINE_MODE_UNION = 0,
  D2D1_COMBINE_MODE_INTERSECT = 1,
  D2D1_COMBINE_MODE_XOR = 2,
  D2D1_COMBINE_MODE_EXCLUDE = 3,
  D2D1_COMBINE_MODE_FORCE_DWORD = 0xffffffff
} ;

Constantes

 
D2D1_COMBINE_MODE_UNION
Valeur : 0
Les deux régions sont combinées en prenant leur union. Avec deux géométries, A et B, la géométrie résultante est geometry A + geometry B.
D2D1_COMBINE_MODE_INTERSECT
Valeur : 1
Les deux régions sont combinées en prenant leur intersection. La nouvelle zone se compose de la région chevauchante entre les deux géométries.
D2D1_COMBINE_MODE_XOR
Valeur : 2
Les deux régions sont combinées en prenant la zone qui existe dans la première région mais pas la seconde et la zone qui existe dans la seconde région mais pas la première. Étant donné deux géométries, A et B, la nouvelle région se compose de (A-B) + (B-A).
D2D1_COMBINE_MODE_EXCLUDE
Valeur : 3
La seconde région est exclue de la première. Étant donné deux géométries, A et B, la zone de la géométrie B est supprimée de la zone de la géométrie A, ce qui produit une région qui est A-B.
D2D1_COMBINE_MODE_FORCE_DWORD
Valeur : 0xffffffff

Remarques

L’illustration suivante montre les différents modes de combinaison géométrique.

Illustration de deux géométries et des formes résultantes après différents modes de combinaison géométrique

Exemples

Le code suivant utilise chacun des différents modes de combinaison pour combiner deux objets ID2D1EllipseGeometry .

HRESULT DemoApp::CreateGeometryResources()
{
    HRESULT hr = S_OK;
    ID2D1GeometrySink *pGeometrySink = NULL;

    // Create the first ellipse geometry to merge.
    const D2D1_ELLIPSE circle1 = D2D1::Ellipse(
        D2D1::Point2F(75.0f, 75.0f),
        50.0f,
        50.0f
        );

    hr = m_pD2DFactory->CreateEllipseGeometry(
        circle1,
        &m_pCircleGeometry1
        );

    if (SUCCEEDED(hr))
    {
        // Create the second ellipse geometry to merge.
        const D2D1_ELLIPSE circle2 = D2D1::Ellipse(
            D2D1::Point2F(125.0f, 75.0f),
            50.0f,
            50.0f
            );

        hr = m_pD2DFactory->CreateEllipseGeometry(circle2, &m_pCircleGeometry2);
    }


    if (SUCCEEDED(hr))
    {
        //
        // Use D2D1_COMBINE_MODE_UNION to combine the geometries.
        //
        hr = m_pD2DFactory->CreatePathGeometry(&m_pPathGeometryUnion);

        if (SUCCEEDED(hr))
        {
            hr = m_pPathGeometryUnion->Open(&pGeometrySink);

            if (SUCCEEDED(hr))
            {
                hr = m_pCircleGeometry1->CombineWithGeometry(
                    m_pCircleGeometry2,
                    D2D1_COMBINE_MODE_UNION,
                    NULL,
                    NULL,
                    pGeometrySink
                    );
            }

            if (SUCCEEDED(hr))
            {
                hr = pGeometrySink->Close();
            }

            SafeRelease(&pGeometrySink);
        }
    }

    if (SUCCEEDED(hr))
    {
        //
        // Use D2D1_COMBINE_MODE_INTERSECT to combine the geometries.
        //
        hr = m_pD2DFactory->CreatePathGeometry(&m_pPathGeometryIntersect);

        if (SUCCEEDED(hr))
        {
            hr = m_pPathGeometryIntersect->Open(&pGeometrySink);

            if (SUCCEEDED(hr))
            {
                hr = m_pCircleGeometry1->CombineWithGeometry(
                    m_pCircleGeometry2,
                    D2D1_COMBINE_MODE_INTERSECT,
                    NULL,
                    NULL,
                    pGeometrySink
                    );
            }

            if (SUCCEEDED(hr))
            {
                hr = pGeometrySink->Close();
            }

            SafeRelease(&pGeometrySink);
        }
    }

    if (SUCCEEDED(hr))
    {
        //
        // Use D2D1_COMBINE_MODE_XOR to combine the geometries.
        //
        hr = m_pD2DFactory->CreatePathGeometry(&m_pPathGeometryXOR);

        if (SUCCEEDED(hr))
        {
            hr = m_pPathGeometryXOR->Open(&pGeometrySink);

            if (SUCCEEDED(hr))
            {
                hr = m_pCircleGeometry1->CombineWithGeometry(
                    m_pCircleGeometry2,
                    D2D1_COMBINE_MODE_XOR,
                    NULL,
                    NULL,
                    pGeometrySink
                    );
            }

            if (SUCCEEDED(hr))
            {
                hr = pGeometrySink->Close();
            }

            SafeRelease(&pGeometrySink);
        }
    }

    if (SUCCEEDED(hr))
    {
        //
        // Use D2D1_COMBINE_MODE_EXCLUDE to combine the geometries.
        //
        hr = m_pD2DFactory->CreatePathGeometry(&m_pPathGeometryExclude);

        if (SUCCEEDED(hr))
        {
            hr = m_pPathGeometryExclude->Open(&pGeometrySink);

            if (SUCCEEDED(hr))
            {
                hr = m_pCircleGeometry1->CombineWithGeometry(
                    m_pCircleGeometry2,
                    D2D1_COMBINE_MODE_EXCLUDE,
                    NULL,
                    NULL,
                    pGeometrySink
                    );
            }

            if (SUCCEEDED(hr))
            {
                hr = pGeometrySink->Close();
            }

            SafeRelease(&pGeometrySink);
        }
    }

    return hr;
}

Configuration requise

   
Client minimal pris en charge Windows 7, Windows Vista avec SP2 et Mise à jour de plateforme pour Windows Vista [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2008 R2, Windows Server 2008 avec SP2 et Platform Update pour Windows Server 2008 [applications de bureau | Applications UWP]
En-tête d2d1.h