Trabajar con el lienzo y las interfaces visuales de XPS OM
En este tema se describe cómo usar las interfaces relacionadas con el lienzo de la API de documentos XPS en un OM XPS.
Nombre de la interfaz | Interfaces secundarias lógicas | Descripción |
---|---|---|
IXpsOMVisual |
IXpsOMCanvas IXpsOMGlyphs IXpsOMPath |
Clase base de las interfaces que definen objetos visuales, como texto y gráficos. Los objetos visuales se pueden recopilar en una interfaz IXpsOMVisualCollection . |
IXpsOMCanvas |
IXpsOMCanvas IXpsOMGlyphs IXpsOMPath |
Colección de objetos visuales que se pueden tratar como un único objeto visual. |
IXpsOMVisual es la interfaz base; los objetos visibles de una página heredan de él. IXpsOMCanvas hereda de IXpsOMVisual y permite que muchos otros elementos visuales se agrupe y actúen como un único elemento visual. Por ejemplo, podría usar una interfaz IXpsOMCanvas para crear un banner de página que contenga una colección de texto y elementos gráficos. Este banner puede contener un logotipo, el eslogan de la empresa y la dirección de la empresa. Puede colocar todos estos elementos en la IXpsOMVisualCollection de una interfaz IXpsOMCanvas y, a continuación, aplicar una única transformación al objeto IXpsOMCanvas para cambiar su tamaño a una página determinada. Esto es mucho más sencillo que calcular y aplicar una transformación a cada componente visual individual en el banner.
También puede usar un lienzo para cambiar el tamaño del contenido de la página para ajustarse al tamaño de página actual. Para ello, coloque todo el contenido de la página en un único lienzo y, a continuación, aplique la transformación adecuada para ajustar el lienzo al tamaño de página actual. Esto también es mucho más sencillo que intentar cambiar el tamaño de cada elemento visual de la colección de objetos visuales de la página.
Mover el contenido de la página a un lienzo
En el ejemplo de código siguiente se mueve el contenido de una página a un lienzo.
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 );
Temas relacionados
- [**Interfaz IXpsOMCanvas**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomcanvas)
- [**IXpsOMVisual Interface**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisual)
- [**IXpsOMVisualCollection (Interfaz)**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisualcollection)