Compartilhar via


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

[**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)