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 );
Zugehörige Themen
- [**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)