Sdílet prostřednictvím


Práce s XPS OM plátnem a vizuálními rozhraními

Toto téma popisuje, jak používat rozhraní související s plátnem XPS Document API v XPS OM.

Název rozhraní Logická podřízená rozhraní Popis
IXpsOMVisual
IXpsOMCanvas
IXpsOMGlyphs
IXpsOMPath
Základní třída rozhraní, která definují vizuální objekty, jako je text a grafika.
Vizuální objekty lze shromažďovat v IXpsOMVisualCollection rozhraní.
IXpsOMCanvas
IXpsOMCanvas
IXpsOMGlyphs
IXpsOMPath
Kolekce vizuálních objektů, které lze považovat za jeden objekt vizuálu.

IXpsOMVisual je základní rozhraní; viditelné objekty stránky z něj dědí. IXpsOMCanvas dědí z IXpsOMVisual a umožňuje seskupit a pracovat s mnoha dalšími vizuálními prvky jako s jedním vizuálním prvkem. Můžete například použít rozhraní IXpsOMCanvas k vytvoření banneru stránky, který obsahuje kolekci textových a grafických prvků. Takový banner může obsahovat logo, firemní heslo a adresu společnosti. Všechny tyto prvky můžete umístit do IXpsOMVisualCollection rozhraní IXpsOMCanvas a pak použít jednu transformaci na IXpsOMCanvas objekt změnit jeho velikost na konkrétní stránku. To je mnohem jednodušší než výpočet a použití transformace na každou jednotlivou vizuální komponentu v banneru.

Pomocí plátna můžete také změnit velikost obsahu stránky tak, aby odpovídala aktuální velikosti stránky. Abyste toho dosáhli, umístěte veškerý obsah stránky na jedno plátno, a poté aplikujte příslušnou transformaci tak, aby se plátno vešlo na aktuální velikost stránky. Je to také mnohem jednodušší než pokus o změnu velikosti jednotlivých prvků vizuálů v kolekci vizuálů na stránce.

Přesunutí obsahu stránky na plátno

Následující příklad kódu přesune obsah stránky na plátno.

    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 – rozhraní**](/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomcanvas)
[**IXpsOMVisual Interface**](/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisual)
[**Rozhraní IXpsOMVisualCollection**](/windows/desktop/api/xpsobjectmodel/nn-xpsobjectmodel-ixpsomvisualcollection)