XPS OM Canvas とビジュアル インターフェイスの操作

このトピックでは、XPS OM で XPS ドキュメント API のキャンバス関連インターフェイスを使用する方法について説明します。

インターフェイス名 論理子インターフェイス 説明
IXpsOMVisual
IXpsOMCanvas
IXpsOMGlyphs
IXpsOMPath
テキストやグラフィックスなどのビジュアル オブジェクトを定義するインターフェイスの基本クラス。
ビジュアル オブジェクトは、 IXpsOMVisualCollection インターフェイスで収集できます。
IXpsOMCanvas
IXpsOMCanvas
IXpsOMGlyphs
IXpsOMPath
1 つのビジュアル オブジェクトとして扱うことができるビジュアル オブジェクトのコレクション。

IXpsOMVisual は基本インターフェイスです。ページの可視オブジェクトは、そのページから継承されます。 IXpsOMCanvas はIXpsOMVisual から継承され、他の多くのビジュアル要素をグループ化して 1 つのビジュアル要素として処理できます。 たとえば、 IXpsOMCanvas インターフェイスを使用して、テキストとグラフィカル要素のコレクションを含むページ バナーを作成できます。 このようなバナーには、ロゴ、会社のスローガン、会社の住所が含まれている場合があります。 これらすべての要素を IXpsOMCanvas インターフェイスの IXpsOMVisualCollection に配置し、IXpsOMCanvas オブジェクトに 1 つの変換を適用して、特定のページにサイズを変更できます。 これは、バナー内の個々のビジュアル コンポーネントに変換を計算して適用するよりもはるかに簡単です。

キャンバスを使用して、現在のページ サイズに合わせてページの内容のサイズを変更することもできます。 これを実現するには、ページのすべての内容を 1 つのキャンバスに配置し、キャンバスを現在のページ サイズに合わせて適切な変換を適用します。 これは、ページ内のビジュアルのコレクション内の各ビジュアル要素のサイズを変更するよりもはるかに簡単です。

ページの内容をキャンバスに移動する

次のコード例では、ページの内容をキャンバスに移動します。

    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)