Поделиться через


Работа с холстом и визуальными интерфейсами XPS OM

В этом разделе описывается, как использовать интерфейсы API документов XPS, связанные с холстом, в объектной модели XPS.

Имя интерфейса Логические дочерние интерфейсы Описание
IXpsOMVisual
IXpsOMCanvas
IXpsOMGlyphs
IXpsOMPath
Базовый класс интерфейсов, определяющих визуальные объекты, такие как текст и графика.
Визуальные объекты можно собирать в интерфейсе IXpsOMVisualCollection .
IXpsOMCanvas
IXpsOMCanvas
IXpsOMGlyphs
IXpsOMPath
Коллекция визуальных объектов, которые можно рассматривать как один визуальный объект.

IXpsOMVisual — базовый интерфейс; видимые объекты страницы наследуются от нее. IXpsOMCanvas наследуется от IXpsOMVisual и позволяет сгруппировать и использовать многие другие визуальные элементы как один визуальный элемент. Например, можно использовать интерфейс IXpsOMCanvas для создания баннера страницы, содержащего коллекцию текстовых и графических элементов. Такой баннер может содержать логотип, слоган компании и адрес компании. Вы можете поместить все эти элементы в IXpsOMVisualCollection интерфейса IXpsOMCanvas , а затем применить одно преобразование к объекту IXpsOMCanvas , чтобы изменить его размер на определенную страницу. Это гораздо проще, чем вычисление и применение преобразования к каждому отдельному визуальному компоненту в баннере.

Вы также можете использовать холст для изменения размера содержимого страницы в соответствии с текущим размером страницы. Для этого поместите все содержимое страницы в один холст, а затем примените соответствующее преобразование, чтобы оно соответствовало текущему размеру страницы. Это также гораздо проще, чем пытаться изменить размер каждого визуального элемента в коллекции визуальных элементов на странице.

Перемещение содержимого страницы на холст

В следующем примере кода содержимое страницы перемещается на холст.

    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**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomcanvas)
[**IXpsOMVisual Interface**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisual)
[**Интерфейс IXpsOMVisualCollection**] (/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisualcollection)