Condividi tramite


Utilizzo delle interfacce visive e canvas XPS OM

In questo argomento viene descritto come usare le interfacce correlate all'area di disegno dell'API documento XPS in un file XPS OM.

Nome interfaccia Interfacce figlio logiche Descrizione
IXpsOMVisual
IXpsOMCanvas
IXpsOMGlyphs
IXpsOMPath
Classe di base delle interfacce che definiscono oggetti visivi, ad esempio testo e grafica.
Gli oggetti visivi possono essere raccolti in un'interfaccia IXpsOMVisualCollection .
IXpsOMCanvas
IXpsOMCanvas
IXpsOMGlyphs
IXpsOMPath
Raccolta di oggetti visivi che possono essere considerati come un singolo oggetto visivo.

IXpsOMVisual è l'interfaccia di base; gli oggetti visibili di una pagina ereditano da esso. IXpsOMCanvas eredita da IXpsOMVisual e consente di raggruppare e agire su molti altri elementi visivi come un singolo elemento visivo. Ad esempio, è possibile usare un'interfaccia IXpsOMCanvas per creare un banner di pagina contenente una raccolta di elementi grafici e di testo. Un banner di questo tipo può contenere un logo, lo slogan dell'azienda e l'indirizzo dell'azienda. È possibile inserire tutti questi elementi nell'oggetto IXpsOMVisualCollection di un'interfaccia IXpsOMCanvas e quindi applicare una singola trasformazione all'oggetto IXpsOMCanvas per ridimensionarlo in una determinata pagina. Questa operazione è molto più semplice rispetto all'elaborazione e all'applicazione di una trasformazione a ogni singolo componente visivo nel banner.

È anche possibile usare un'area di disegno per ridimensionare il contenuto della pagina in base alle dimensioni correnti della pagina. A tale scopo, posizionare tutto il contenuto della pagina in un'unica area di disegno, quindi applicare la trasformazione appropriata per adattare l'area di disegno alle dimensioni correnti della pagina. Questo è anche molto più semplice rispetto al tentativo di ridimensionare ogni elemento visivo nella raccolta di oggetti visivi nella pagina.

Spostare il contenuto della pagina in un'area di disegno

Nell'esempio di codice seguente il contenuto di una pagina viene spostato in un'area di disegno.

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

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