Arbeiten mit XPS OM Canvas und visuellen Schnittstellen

In diesem Thema wird beschrieben, wie Sie die Canvas-bezogenen Schnittstellen der XPS-Dokument-API in einem XPS-OM verwenden.

Schnittstellenname Logische untergeordnete Schnittstellen Beschreibung
IXpsOMVisual
IXpsOMCanvas
IXpsOMGlyphen
IXpsOMPath
Die Basisklasse der Schnittstellen, die visuelle Objekte wie Text und Grafiken definieren.
Visuelle Objekte können in einer IXpsOMVisualCollection-Schnittstelle gesammelt werden.
IXpsOMCanvas
IXpsOMCanvas
IXpsOMGlyphen
IXpsOMPath
Eine Auflistung visueller Objekte, die als einzelnes visuelles Objekt behandelt werden können.

IXpsOMVisual ist die Basisschnittstelle; die sichtbaren Objekte einer Seite erben. IXpsOMCanvas erbt von IXpsOMVisual und ermöglicht es, viele andere visuelle Elemente zu gruppieren und als einzelnes visuelles Element zu agieren. Sie können beispielsweise eine IXpsOMCanvas-Schnittstelle verwenden, um ein Seitenbanner zu erstellen, das eine Sammlung von Text und grafischen Elementen enthält. Ein solches Banner kann ein Logo, den Firmenslogan und die Firmenadresse enthalten. Sie können alle diese Elemente in der IXpsOMVisualCollection einer IXpsOMCanvas-Schnittstelle platzieren und dann eine einzelne Transformation auf das IXpsOMCanvas-Objekt anwenden, um die Größe auf eine bestimmte Seite zu ändern. Dies ist viel einfacher als das Berechnen und Anwenden einer Transformation auf jede einzelne visuelle Komponente im Banner.

Sie können auch eine Canvas verwenden, um die Größe des Seiteninhalts an die aktuelle Seitengröße zu ändern. Um dies zu erreichen, platzieren Sie den gesamten Inhalt der Seite in einem einzelnen Canvas, und wenden Sie dann die entsprechende Transformation an, um den Canvas an die aktuelle Seitengröße anzupassen. Dies ist auch viel einfacher als der Versuch, die Größe jedes visuellen Elements in der Sammlung von Visuals auf der Seite zu ändern.

Verschieben von Seiteninhalten in eine Canvas

Im folgenden Codebeispiel wird der Inhalt einer Seite in einen Canvas verschoben.

    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-Schnittstelle**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomcanvas)
[**IXpsOMVisual Interface**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisual)
[**IXpsOMVisualCollection-Schnittstelle**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisualcollection)