Active ドキュメント
アクティブ ドキュメントは、 OLE の複合ドキュメントの手法を拡張します。これらの拡張機能は、ビューを管理する追加のインターフェイスの形式でオブジェクトがコンテナー内で機能しますが生じた場合は表示および印刷の関数のコントロールを保持できるように、提供されます。このプロセスは、外部のゾーン (Microsoft Office バインダーやなどの Microsoft Internet Explorer)とネイティブ ゾーンのドキュメントを表示することもできます (製品の独自のビュー ポートなど)。
このセクションでは、これらの機能 アクティブ ドキュメントの必要条件について説明します。アクティブ ドキュメントには、データ セットを作成し、データの格納および取得できるストレージへのアクセスがあります。は、データの一つ以上のビューを作成および管理できます。OLE ドキュメントの通常の埋め込み、埋め込み先編集の有効化インターフェイスをサポートするだけでなく、アクティブ ドキュメントは IOleDocumentすると、ビューを作成する機能を示します。このインターフェイスを使用して、コンテナーは (および列挙する)がアクティブ ドキュメントができるビューを作成するように求めることができます。このインターフェイスを使用して、アクティブ ドキュメントは、複数のビューまたは複雑な四角形をサポートするかどうか、自身に関するそのほかの情報 (など)を提供できます。
次に 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);
}
どのアクティブ ドキュメントはこのインターフェイスを持つビューのゾーンのプロバイダーが必要です。ドキュメントがコンテナー内に埋め込まれていない場合、アクティブ ドキュメント サーバー自体はビューの帯を提供する必要があります。ただし、アクティブ ドキュメントがアクティブ ドキュメント コンテナーに埋め込まれていると、コンテナーはビューの帯を提供します。
アクティブ ドキュメントはなど)の ビュー の一つ以上の入力をデータ (たとえば、標準、アウトライン、ページ レイアウト作成できます。ビューは、データが参照できるフィルターとして機能します。ドキュメントにビューの 1 種類だけいない場合でも、新しいウィンドウの機能 (たとえば、 Office アプリケーションの ウィンドウ(&&W),ウィンドウ のメニューの 新しいウィンドウを開く(&&N),新しいウィンドウを開く,新規ウィンドウ の項目)のサポートの手段として複数のビューをサポートすることもできます。
アクティブ ドキュメントの必要条件
アクティブ ドキュメント コンテナーに表示できるアクティブ ドキュメントはです:
IPersistStorageの実行によってストレージ機構として OLE の複合ファイルを使用します。
Create From Fileを含む OLE ドキュメントの機能を埋め込む、基本をサポートします。これは、インターフェイス IPersistFile、 IOleObjectと IDataObjectが小さくなります。
それぞれが埋め込み先編集の有効化が可能である一つ以上のビューをサポートします。つまり、ビューはインターフェイス IOleDocumentView 、インターフェイス IOleInPlaceObject と IOleInPlaceActiveObject をサポートする必要があります ( IOleInPlaceFrame コンテナーの IOleInPlaceSite およびインターフェイスを使用)。
標準のアクティブ ドキュメント インターフェイス IOleDocument、 IOleCommandTargetと IPrintをサポートします。
これらの要件でコンテナー側インターフェイスをいつどのようにの知識を使用するようになっています。
ビュー オブジェクトの要件
アクティブ ドキュメントは、データの一つ以上のビューを作成できます。機能的には、これらのビューは、データを表示するための特定のメソッドにポートなどです。アクティブ ドキュメントを一つのビューだけをサポートする場合は、アクティブ ドキュメントとその一つのビューは一つのクラスを使用して実装できます。IOleDocument::CreateView は同じオブジェクトの IOleDocumentView インターフェイス ポインターを返します。
アクティブ ドキュメント コンテナー内で表されるは、ビューのコンポーネントは 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 を実行して、ビューはコンテナーのユーザー インターフェイスで作成されたコマンドを受け取ることができます。 新規作成(&&N),新規作成,新規,new、 開く(&&O),開く,[開く]、 名前を付けて保存、 ファイル のメニューの 印刷 など); と 編集 のメニューの コピー(&&C),コピー、 貼り付け(&&P),貼り付け、 元に戻す(&&U),元に戻す )。詳細については、「メッセージ処理とコマンド ターゲット」を参照してください。