Работа с холстом и визуальными интерфейсами 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)