Partager via


Utilisation des interfaces visuelles et du canevas du modèle d’objet XPS

Cette rubrique explique comment utiliser les interfaces liées au canevas de l’API document XPS dans un modèle de modèle XPS.

Nom de l’interface Interfaces enfants logiques Description
IXpsOMVisual
IXpsOMCanvas
IXpsOMGlyphes
IXpsOMPath
Classe de base des interfaces qui définissent des objets visuels, tels que du texte et des graphiques.
Les objets visuels peuvent être collectés dans une interface IXpsOMVisualCollection .
IXpsOMCanvas
IXpsOMCanvas
IXpsOMGlyphes
IXpsOMPath
Collection d’objets visuels qui peuvent être traités comme un seul objet visuel.

IXpsOMVisual est l’interface de base ; les objets visibles d’une page en héritent. IXpsOMCanvas hérite d’IXpsOMVisual et permet de regrouper de nombreux autres éléments visuels et d’agir en tant qu’élément visuel unique. Par exemple, vous pouvez utiliser une interface IXpsOMCanvas pour créer une bannière de page qui contient une collection de texte et d’éléments graphiques. Une telle bannière peut contenir un logo, le slogan de l’entreprise et l’adresse de l’entreprise. Vous pouvez placer tous ces éléments dans iXpsOMVisualCollection d’une interface IXpsOMCanvas , puis appliquer une transformation unique à l’objet IXpsOMCanvas pour le redimensionner sur une page particulière. Cela est beaucoup plus simple que de calculer et d’appliquer une transformation à chaque composant visuel individuel dans la bannière.

Vous pouvez également utiliser un canevas pour redimensionner le contenu de la page en fonction de la taille de page actuelle. Pour ce faire, placez tout le contenu de la page dans un canevas unique, puis appliquez la transformation appropriée pour l’adapter à la taille de page actuelle. Cela est également beaucoup plus simple que d’essayer de redimensionner chaque élément visuel dans la collection de visuels de la page.

Déplacer le contenu d’une page vers un canevas

L’exemple de code suivant déplace le contenu d’une page vers un canevas.

    HRESULT                   hr = S_OK;

    IXpsOMVisualCollection    *pageVisuals;
    IXpsOMVisualCollection    *canvasVisuals;
    IXpsOMVisual              *oneVisual;
    IXpsOMCanvas              *newPageCanvas;

    UINT32 numVisuals = 0;
    UINT32 thisVisual;

    // get the page's visual collection
    // and how many objects it contains
    hr = page->GetVisuals( &pageVisuals );
    hr = pageVisuals->GetCount ( &numVisuals );

    // create the new canvas object and
    // its (empty) visual collection
    hr = xpsFactory->CreateCanvas ( &newPageCanvas );
    hr = newPageCanvas->GetVisuals ( &canvasVisuals );

    // go through the page's list of visual objects,
    //  move each one from the page's list to the canvas' list
    //  release the local pointer
    //  remove it from the page's collection
    thisVisual = 0;
    while (thisVisual < numVisuals) {
        hr = pageVisuals->GetAt (0, &oneVisual);
        hr = canvasVisuals->Append (oneVisual);
        hr = pageVisuals->RemoveAt (0);
        thisVisual++;
    }
    // the page's visual collection should be empty
    hr = pageVisuals->GetCount (&numVisuals);
    _ASSERT (0 == numVisuals);

    // add the new canvas to the page's visual collection
    pageVisuals->Append ( newPageCanvas );

[**IXpsOMCanvas, interface**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomcanvas)
[**IXpsOMVisual Interface**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisual)
[**IXpsOMVisualCollection Interface**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisualcollection)