Trabalhando com o XPS OM Canvas e interfaces visuais
Este tópico descreve como usar as interfaces relacionadas à tela da API de Documento XPS em um OM XPS.
Nome da interface | Interfaces filho lógicas | Descrição |
---|---|---|
IXpsOMVisual |
IXpsOMCanvas IXpsOMGlyphs IXpsOMPath |
A classe base das interfaces que definem objetos visuais, como texto e gráficos. Objetos visuais podem ser coletados em uma interface IXpsOMVisualCollection . |
IXpsOMCanvas |
IXpsOMCanvas IXpsOMGlyphs IXpsOMPath |
Uma coleção de objetos visuais que podem ser tratados como um único objeto visual. |
IXpsOMVisual é a interface base; os objetos visíveis de uma página herdam dela. IXpsOMCanvas herda do IXpsOMVisual e permite que muitos outros elementos visuais sejam agrupados e atuados como um único elemento visual. Por exemplo, você pode usar uma interface IXpsOMCanvas para criar uma faixa de página que contém uma coleção de elementos gráficos e de texto. Essa faixa pode conter um logotipo, o slogan da empresa e o endereço da empresa. Você pode colocar todos esses elementos no IXpsOMVisualCollection de uma interface IXpsOMCanvas e aplicar uma única transformação ao objeto IXpsOMCanvas para redimensioná-lo em uma página específica. Isso é muito mais simples do que calcular e aplicar uma transformação a cada componente visual individual na faixa.
Você também pode usar uma tela para redimensionar o conteúdo da página para se ajustar ao tamanho da página atual. Para fazer isso, coloque todo o conteúdo da página em uma única tela e aplique a transformação apropriada para ajustar a tela ao tamanho da página atual. Isso também é muito mais simples do que tentar redimensionar cada elemento visual na coleção de visuais na página.
Mover o conteúdo da página para uma tela
O exemplo de código a seguir move o conteúdo de uma página para uma tela.
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 );
Tópicos relacionados
- [**Interface IXpsOMCanvas**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomcanvas)
- [**Interface IXpsOMVisual**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisual)
- [**Interface IXpsOMVisualCollection**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisualcollection)