次の方法で共有


Active ドキュメント コンテナー

Microsoft Office バインダーや Internet Explorer などの Active ドキュメント コンテナーでは、アプリケーションの種類が異なる複数のドキュメントを 1 つのフレームで操作できます。つまり、ドキュメント タイプごとにアプリケーション フレームを作成したり、使い分ける必要はありません。

MFC では、COleDocObjectItem クラスで、Active ドキュメント コンテナーを完全にサポートしています。 MFC アプリケーション ウィザードで Active ドキュメント コンテナーを作成するには、[複合ドキュメント サポート] ページの [アクティブ ドキュメント コンテナー] チェック ボックスをオンにします。 詳細については、「Active ドキュメント コンテナー アプリケーションの作成」を参照してください。

Active ドキュメント コンテナーの詳細については、次のトピックを参照してください。

コンテナーの必要条件

Active ドキュメント コンテナーでの active ドキュメントのサポートは、インターフェイスの実装だけを意味します。また、含まれているオブジェクトのインターフェイスを使用しての知識が必要です。 同様に、Active ドキュメントの拡張機能でも、コンテナーが Active ドキュメント上でこの拡張インターフェイスを使用できることが必要です。

Active ドキュメントを統合する Active ドキュメント コンテナーは、次の条件を満たす必要があります。

  • IPersistStorage インターフェイスを使用してオブジェクト ストレージを処理できること。アクティブ ドキュメントごとに IStorage のインスタンスが必要です。

  • OLE ドキュメントの基本的な埋め込み機能をサポートしていること。ドキュメントまたは埋め込みごとに、IOleClientSite および IAdviseSink を実装した "サイト" オブジェクトが 1 つ必要です。

  • 埋め込みオブジェクトまたは Active ドキュメントの埋め込み先編集の有効化をサポートしていること。 コンテナーのサイト オブジェクトで IOleInPlaceSite を実装し、コンテナーのフレーム オブジェクトで IOleInPlaceFrame を提供する必要があります。

  • Active ドキュメントの拡張機能をサポートしていること。コンテナーがドキュメントに指示できるよう、IOleDocumentSite を実装する必要があります。 コンテナーに Active ドキュメント インターフェイスの IOleCommandTarget および IContinueCallback を実装し、印刷や保存などの単純なコマンドを受け取るようにすることもできます。

フレーム オブジェクト、ビュー オブジェクト、およびコンテナー オブジェクトで IOleCommandTarget を実装し、特定のコマンドのディスパッチをサポートすることもできます (「メッセージ処理とコマンド ターゲット」を参照)。 ビュー オブジェクトとコンテナー オブジェクトで IPrintIContinueCallback を実装し、プログラムによる印刷をサポートすることもできます (「プログラムによる印刷」を参照)。

次の図は、コンテナーとそのコンポーネントの関係 (左側) および Active ドキュメントとそのビューの関係 (右側) を概念的に示したものです。 この図の Active ドキュメントはストレージとデータを管理し、ビューはそのデータの表示や印刷を行います。 太字のインターフェイスは、Active ドキュメントに必要なインターフェイスです。太字で斜体のインターフェイスはオプションです。 その他のインターフェイスは必須です。

アクティブ ドキュメント コンテナー インターフェイス

1 つのビューしかサポートしていないドキュメントでも、ビュー コンポーネントとドキュメント コンポーネント (つまり、対応するインターフェイス) を 1 つの具象クラスで実装できます。 また、一度に 1 つのビューしかサポートしないコンテナー サイトは、ドキュメント サイトとビュー サイトを 1 つの具象サイト クラスに統合できます。 ただし、コンテナーのフレーム オブジェクトは別のものとして扱う必要があります。コンテナーのドキュメント コンポーネントは、ここでは単にアーキテクチャの全体像を示すために使用されています。コンテナーのこの部分は、Active ドキュメント コンテインメント アーキテクチャの影響は受けません。

ドキュメント サイト オブジェクト

Active ドキュメント コンテインメント アーキテクチャのドキュメント サイトは、OLE ドキュメントのクライアント サイト オブジェクトに、次の IOleDocument インターフェイスを追加したものです。

interface IOleDocumentSite : IUnknown

{

HRESULT ActivateMe(IOleDocumentView *pViewToActivate);

}

ドキュメント サイトは、概念的には 1 つ以上の "ビュー サイト" オブジェクトのコンテナーと考えることができます。 各ビュー サイト オブジェクトは、ドキュメント サイトが管理しているドキュメントの各ビュー オブジェクトに対応しています。 コンテナーがドキュメント サイトごとに 1 つのビューしかサポートしていない場合は、1 つの具象クラスでドキュメント サイトとビュー サイトを実装できます。

ビュー サイト オブジェクト

コンテナーのビュー サイト オブジェクトは、ドキュメントの特定のビューの表示領域を管理します。 ビュー サイトは、標準の IOleInPlaceSite インターフェイスをサポートするだけではなく、一般に、プログラムで印刷を制御するための IContinueCallback も実装します。 ビュー オブジェクトは、IContinueCallback を問い合わせることはないので、実際にはコンテナーが必要としているどのオブジェクトにも実装できます。

複数のビューをサポートするコンテナーは、ドキュメント サイト内に複数のビュー サイト オブジェクトを作成できる必要があります。 これにより、IOleInPlaceSite を使用した場合と同じように、各ビューにそれぞれ個別にアクティブ化サービスおよび非アクティブ化サービスを提供できます。

Frame オブジェクト

コンテナーのフレーム オブジェクトは、OLE ドキュメントの埋め込み先編集の有効化に使用されるフレームとよく似ています。つまり、メニューとツール バーのネゴシエーションを行います。 ビュー オブジェクトは、IOleInPlaceSite::GetWindowContext を使用して、このフレーム オブジェクトにアクセスします。また、このインターフェイスは、コンテナー ドキュメント (ペイン レベルのツール バーのネゴシエーションや埋め込みオブジェクトの列挙を行う) を表すコンテナー オブジェクトへのアクセスにも使用されます。

Active ドキュメント コンテナーでは、IOleCommandTarget を追加するとにより、フレーム機能を拡張できます。 つまり、コンテナーがアクティブ ドキュメントのユーザー インターフェイスを使用して実行されたコマンドを受け取ることができます。これは、このインターフェイスを使用して、コンテナーが同じコマンド ([ファイル] メニューの [新規作成]、[開く]、[名前を付けて保存]、[印刷]、[編集] メニューの [コピー]、[貼り付け]、[元に戻す] など) をアクティブ ドキュメントに送るのと同じ方法で行われます。 詳細については、「メッセージ処理とコマンド ターゲット」を参照してください。

参照

概念

Active ドキュメント コンテインメント