Active ドキュメント
Active ドキュメントは、OLE の複合ドキュメント テクノロジを拡張します。 これらの拡張機能は、ビューを管理する追加のインターフェイスの形式でオブジェクトがコンテナー内で機能するが生じた場合に表示および印刷関数のコントロールを維持できるように用意されています。 このプロセスは、外部のフレーム (Microsoft Office バインダーなど、または Microsoft Internet Explorer) とネイティブ フレームのドキュメントを表示することができます (製品の独自のビュー ポートなど)。
ここでは アクティブ ドキュメントの要件機能について説明します。 Active ドキュメントはデータ セットを所有し、データの格納および取得することが可能なストレージにアクセスできます。 これはデータの一つ以上のビューを作成し、管理できます。 OLE ドキュメントの通常の埋め込み、埋め込み先編集の有効化インターフェイスのサポートに加えて、Active ドキュメントは IOleDocumentでビューを作成する方法を示します。 このインターフェイスを使用して、コンテナーは (おそらく列挙する) 表示アクティブ文書ができるビューを作成するように求めることができます。 このインターフェイスを介して、Active ドキュメントは、複数のビューまたは複雑な四角形をサポートするかどうかを自動的に関するそのほかの情報を、次のように指定できます。
次に IOleDocument インターフェイスです。 IEnumOleDocumentViews インターフェイスが IOleDocumentView * 型の標準 OLE 列挙子であることに注意してください。
interface IOleDocument : IUnknown
{
HRESULT CreateView(
[in] IOleInPlaceSite *pIPSite,
[in] IStream *pstm,
[in] DWORD dwReserved,
[out] IOleDocumentView **ppView);
HRESULT GetDocMiscStatus([out] DWORD *pdwStatus);
HRESULT EnumViews(
[out] IEnumOleDocumentViews **ppEnum,
[out] IOleDocumentView **ppView);
}
どのアクティブ ドキュメントでは、このインターフェイスを持つビュー フレーム プロバイダーが必要です。 ドキュメントがコンテナー内に埋め込む、Active ドキュメント サーバー自体はビューのフレームを提供する必要があります。 ただし、Active ドキュメントがアクティブ ドキュメント コンテナーに埋め込まれている場合、コンテナーはビューのフレームを提供します。
Active ドキュメントはなど) の ビュー の一つ以上のタイプをデータ (標準、アウトライン、ページ レイアウトを作成できます。 ビューはデータを参照することが可能なフィルターとして機能します。 ドキュメントにビューの 1 種類しかない場合でも、新しいウィンドウの機能 (たとえば、Office アプリケーションの [ウィンドウ] メニューの 新規ウィンドウ 項目) をサポートする手段として、複数のビューをサポートすることもできます。
アクティブ ドキュメントの要件
Active ドキュメント コンテナーに表示できるアクティブ ドキュメントがあります:
IPersistStorageの実装によってストレージ機構として OLE 複合ファイルを使用します。
ファイルから作成を含む OLE ドキュメントの機能も埋め込む基本をサポートします。 つまり、インターフェイス IPersistFile、IOleObjectと IDataObjectが小さくなります。
それぞれが埋め込み先編集の有効化が可能な一つ以上のビューをサポートします。 つまり、ビューがインターフェイス IOleDocumentView、インターフェイス IOleInPlaceObject と IOleInPlaceActiveObject をサポートする必要があります (コンテナーの IOleInPlaceSite と IOleInPlaceFrame インターフェイスを使用します。
標準の Active ドキュメント インターフェイス IOleDocument、IOleCommandTargetと IPrintをサポートします。
これらの要件にコンテナー側インターフェイスをいつどのように関する情報が使用できるようになっています。
ビュー オブジェクトの要件
Active ドキュメントはデータのビューを生成できます。 機能的には、これらのビューは、データを表示する方法、ポートなどです。 アクティブ文書が一つのビューだけをサポートする場合は、アクティブ ドキュメントとその一つのビューは一つのクラスを使用して実装することもできます。 IOleDocument::CreateView は 同じオブジェクトの IOleDocumentView インターフェイス ポインターを返します。
Active ドキュメント コンテナー内で表すことができない場合は、ビューのコンポーネントは IOleDocumentViewに加えて IOleInPlaceObject と IOleInPlaceActiveObject をサポートする必要があります:
interface IOleDocumentView : IUnknown
{
HRESULT SetInPlaceSite([in] IOleInPlaceSite *pIPSite);
HRESULT GetInPlaceSite([out] IOleInPlaceSite **ppIPSite);
HRESULT GetDocument([out] IUnknown **ppunk);
[input_sync] HRESULT SetRect([in] LPRECT prcView);
HRESULT GetRect([in] LPRECT prcView);
[input_sync] HRESULT SetRectComplex(
[in] LPRECT prcView,
[in] LPRECT prcHScroll,
[in] LPRECT prcVScroll,
[in] LPRECT prcSizeBox);
HRESULT Show([in] BOOL fShow);
HRESULT UIActivate([in] BOOL fUIActivate);
HRESULT Open(void);
HRESULT CloseView([in] DWORD dwReserved);
HRESULT SaveViewState([in] IStream *pstm);
HRESULT ApplyViewState([in] IStream *pstm);
HRESULT Clone(
[in] IOleInPlaceSite *pIPSiteNew,
[out] IOleDocumentView **ppViewNew);
}
すべてのビューにビューのフレームとビューポート (そのウィンドウの HWND と四角形領域) をカプセル化する関連のサイトがあります。 サイトでは、この機能を IOleInPlaceSite 標準インターフェイスも公開します。 単一の HWND のビューポートを持つことができることに注意してください。
通常、ビューの種類ごとに別の形式で出力があります。 したがって、ビューおよび対応するビュー サイトが IPrint であり、IContinueCallback、各印刷インターフェイスを実装する必要があります。 ビューのフレームは IPrint でビュー プロバイダーとヘッダー、フッター、"関連要素が正しく表示されるように、印刷が開始される調整する必要があります。 ビュー プロバイダーは IContinueCallbackして印刷関連のイベントのフレームに通知します。 これらのインターフェイスを使用する詳細については、「プログラムによる印刷」を参照してください。
アクティブ文書が一つのビューだけをサポートすることに注意してください。、アクティブ ドキュメントとその一つのビューは単一の具象クラスを使用して実装することもできます。 IOleDocument::CreateView は 同じオブジェクトの IOleDocumentView インターフェイス ポインターを返します。 つまり、1 種類のビューだけが必要な場合は 2 個の個別のオブジェクトのインスタンスを持つことが必要です。
ビュー オブジェクトは、コマンドの対象になります。 IOleCommandTarget の実装によってビューは、コンテナーのユーザー インターフェイスで作成されたコマンドを受け取ることができます。新規作成、開く、名前を付けて保存、ファイル メニューの 印刷 など) ; 編集 とメニューの コピー、貼り付け、元に戻す)。 詳細については、「メッセージ処理とコマンド ターゲット」を参照してください。