COleServerDoc クラス
OLE サーバー ドキュメントの基底クラスです。
構文
class AFX_NOVTABLE COleServerDoc : public COleLinkingDoc
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
COleServerDoc::COleServerDoc | COleServerDoc オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
COleServerDoc::ActivateDocObject | 関連付けられている DocObject ドキュメントをアクティブにします。 |
COleServerDoc::ActivateInPlace | インプレース編集のためにドキュメントをアクティブにします。 |
COleServerDoc::D eactivateAndUndo | サーバーのユーザー インターフェイスを非アクティブ化します。 |
COleServerDoc::D iscardUndoState | 元に戻す状態情報を破棄します。 |
COleServerDoc::GetClientSite | 基になる IOleClientSite インターフェイスへのポインターを取得します。 |
COleServerDoc::GetEmbeddedItem | 文書全体を表す項目へのポインターを返します。 |
COleServerDoc::GetItemClipRect | インプレース編集用の現在のクリッピング四角形を返します。 |
COleServerDoc::GetItemPosition | インプレース編集のために、コンテナー アプリケーションのクライアント領域を基準とした現在位置の四角形を返します。 |
COleServerDoc::GetZoomFactor | ズーム係数をピクセル単位で返します。 |
COleServerDoc::IsDocObject | ドキュメントが DocObject であるかどうかを判断します。 |
COleServerDoc::IsEmbedded | ドキュメントがコンテナー ドキュメントに埋め込まれているか、スタンドアロンで実行されているかを示します。 |
COleServerDoc::IsInPlaceActive | 項目が現在アクティブ化されている場合は TRUE を返します。 |
COleServerDoc::NotifyChanged | ユーザーがドキュメントを変更したことをコンテナーに通知します。 |
COleServerDoc::NotifyClosed | ユーザーがドキュメントを閉じたことをコンテナーに通知します。 |
COleServerDoc::NotifyRename | ユーザーがドキュメントの名前を変更したことをコンテナーに通知します。 |
COleServerDoc::NotifySaved | ユーザーがドキュメントを保存したことをコンテナーに通知します。 |
COleServerDoc::OnDeactivate | ユーザーが所定の場所でアクティブ化された項目を非アクティブ化するときに、フレームワークによって呼び出されます。 |
COleServerDoc::OnDeactivateUI | インプレース アクティブ化のために作成されたコントロールやその他のユーザー インターフェイス要素を破棄するためにフレームワークによって呼び出されます。 |
COleServerDoc::OnDocWindowActivate | コンテナーのドキュメント フレーム ウィンドウがアクティブ化または非アクティブ化されたときにフレームワークによって呼び出されます。 |
COleServerDoc::OnResizeBorder | コンテナー アプリケーションのフレーム ウィンドウまたはドキュメント ウィンドウのサイズが変更されたときにフレームワークによって呼び出されます。 |
COleServerDoc::OnShowControlBars | インプレース編集のためにコントロール バーを表示または非表示にするためにフレームワークによって呼び出されます。 |
COleServerDoc::OnUpdateDocument | 埋め込みアイテムであるサーバー ドキュメントが保存されるときにフレームワークによって呼び出され、コンテナーのアイテムのコピーが更新されます。 |
COleServerDoc::RequestPositionChange | インプレース編集フレームの位置を変更します。 |
COleServerDoc::SaveEmbedding | ドキュメントを保存するようにコンテナー アプリケーションに指示します。 |
COleServerDoc::ScrollContainerBy | コンテナー ドキュメントをスクロールします。 |
COleServerDoc::UpdateAllItems | ユーザーがドキュメントを変更したことをコンテナーに通知します。 |
保護メソッド
名前 | 説明 |
---|---|
COleServerDoc::CreateInPlaceFrame | インプレース編集用のフレーム ウィンドウを作成するためにフレームワークによって呼び出されます。 |
COleServerDoc::D estroyInPlaceFrame | インプレース編集のためにフレーム ウィンドウを破棄するためにフレームワークによって呼び出されます。 |
COleServerDoc::GetDocObjectServer | この関数をオーバーライドして新しい CDocObjectServer オブジェクトを作成し、このドキュメントが DocObject コンテナーであることを示します。 |
COleServerDoc::OnClose | コンテナーがドキュメントを閉じるよう要求したときにフレームワークによって呼び出されます。 |
COleServerDoc::OnExecOleCmd | 指定したコマンドを実行するか、コマンドのヘルプを表示します。 |
COleServerDoc::OnFrameWindowActivate | コンテナーのフレーム ウィンドウがアクティブ化または非アクティブ化されたときにフレームワークによって呼び出されます。 |
COleServerDoc::OnGetEmbeddedItem | 埋め込みアイテムを取得するために使用される、ドキュメント全体を表す COleServerItem を取得するために呼び出されます。 実装が必要です。 |
COleServerDoc::OnReactivateAndUndo | インプレース編集中に行われた変更を元に戻すためにフレームワークによって呼び出されます。 |
COleServerDoc::OnSetHostNames | コンテナーが埋め込みオブジェクトのウィンドウ タイトルを設定するときにフレームワークによって呼び出されます。 |
COleServerDoc::OnSetItemRects | コンテナー アプリケーションのウィンドウ内にインプレース編集フレーム ウィンドウを配置するためにフレームワークによって呼び出されます。 |
COleServerDoc::OnShowDocument | ドキュメントを表示または非表示にするためにフレームワークによって呼び出されます。 |
解説
サーバー ドキュメントには COleServerItem オブジェクトを含めることができます。これは、埋め込みアイテムまたはリンクされたアイテムへのサーバー インターフェイスを表します。 埋め込みアイテムを編集するためにコンテナーによってサーバー アプリケーションが起動されると、その項目は独自のサーバー ドキュメントとして読み込まれます。 COleServerDoc
オブジェクトには、ドキュメント全体で構成される 1 つの COleServerItem
オブジェクトだけが含まれます。 リンクされたアイテムを編集するためにコンテナーによってサーバー アプリケーションが起動されると、既存のドキュメントがディスクから読み込まれます。リンクされたアイテムを示すために、ドキュメントのコンテンツの一部が強調表示されます。
COleServerDoc
オブジェクトには、 COleClientItem クラスの項目を含めることもできます。 これにより、コンテナー サーバー アプリケーションを作成できます。 フレームワークには、COleServerItem
オブジェクトにサービスを提供しながら、COleClientItem
項目を適切に格納する機能が用意されています。
サーバー アプリケーションがリンクをサポートしていない場合、サーバー ドキュメントには、埋め込みオブジェクト全体をドキュメントとして表すサーバー項目が常に 1 つだけ含まれます。 サーバー アプリケーションがリンクをサポートしている場合は、選択内容がクリップボードにコピーされるたびにサーバー項目を作成する必要があります。
COleServerDoc
を使用するには、そこからクラスを派生させ、OnGetEmbeddedItem メンバー関数を実装します。これにより、サーバーは埋め込み項目をサポートできます。 COleServerItem
からクラスを派生させ、ドキュメント内の項目を実装し、そのクラスのオブジェクトをOnGetEmbeddedItem
から返します。
リンクされたアイテムをサポートするために、 COleServerDoc
は OnGetLinkedItem メンバー関数を提供します。 ドキュメント アイテムを独自に管理する方法がある場合は、既定の実装を使用するか、オーバーライドすることができます。
アプリケーションでサポートされているサーバー ドキュメントの種類ごとに 1 つの COleServerDoc
派生クラスが必要です。 たとえば、サーバー アプリケーションでワークシートとグラフがサポートされている場合は、2 つの COleServerDoc
派生クラスが必要です。
サーバーの詳細については、「 Servers: サーバーの実装」を参照してください。
継承階層
COleServerDoc
要件
ヘッダー: afxole.h
COleServerDoc::ActivateDocObject
関連付けられている DocObject ドキュメントをアクティブにします。
void ActivateDocObject();
解説
既定では、 COleServerDoc
はアクティブなドキュメント (DocObject とも呼ばれます) をサポートしていません。 このサポートを有効にするには、 GetDocObjectServer およびクラス CDocObjectServer を参照してください。
COleServerDoc::ActivateInPlace
インプレース編集のためにアイテムをアクティブにします。
BOOL ActivateInPlace();
戻り値
成功した場合は 0 以外。それ以外の場合は 0。項目が完全に開かれていることを示します。
解説
この関数は、インプレース アクティブ化に必要なすべての操作を実行します。 インプレース フレーム ウィンドウを作成し、アクティブ化して項目に合わせてサイズを設定し、共有メニューやその他のコントロールを設定し、項目をビューにスクロールして、フォーカスをインプレース フレーム ウィンドウに設定します。
この関数は、 COleServerItem::OnShow の既定の実装によって呼び出されます。 アプリケーションがインプレース アクティブ化の別の動詞 (Play など) をサポートしている場合は、この関数を呼び出します。
COleServerDoc::COleServerDoc
OLE システム DLL に接続せずに COleServerDoc
オブジェクトを構築します。
COleServerDoc();
解説
OLE との通信を開くには、 COleLinkingDoc::Register を呼び出す必要があります。 アプリケーションで COleTemplateServer を使用している場合は、COleLinkingDoc
のOnNewDocument
、OnOpenDocument
、およびOnSaveDocument
の実装によってCOleLinkingDoc::Register
が呼び出されます。
COleServerDoc::CreateInPlaceFrame
フレームワークは、この関数を呼び出して、インプレース編集用のフレーム ウィンドウを作成します。
virtual COleIPFrameWnd* CreateInPlaceFrame(CWnd* pParentWnd);
パラメーター
pParentWnd
コンテナー アプリケーションの親ウィンドウへのポインター。
戻り値
インプレース フレーム ウィンドウへのポインター。失敗した場合は NULL。
解説
既定の実装では、ドキュメント テンプレートで指定された情報を使用してフレームを作成します。 使用されるビューは、ドキュメント用に作成された最初のビューです。 このビューは、元のフレームから一時的にデタッチされ、新しく作成されたフレームにアタッチされます。
これは、高度なオーバーライドが可能です。
COleServerDoc::D eactivateAndUndo
アプリケーションが元に戻すをサポートし、ユーザーがアイテムをアクティブ化した後、編集する前に [元に戻す] を選択した場合は、この関数を呼び出します。
BOOL DeactivateAndUndo();
戻り値
正常に完了した場合はゼロ以外、それ以外の場合は 0 です。
解説
コンテナー アプリケーションが Microsoft Foundation クラス ライブラリを使用して記述されている場合、この関数を呼び出すと、 COleClientItem::OnDeactivateAndUndo が呼び出され、サーバーのユーザー インターフェイスが非アクティブ化されます。
COleServerDoc::D estroyInPlaceFrame
フレームワークはこの関数を呼び出して、インプレース フレーム ウィンドウを破棄し、インプレース アクティブ化の前にサーバー アプリケーションのドキュメント ウィンドウをその状態に戻します。
virtual void DestroyInPlaceFrame(COleIPFrameWnd* pFrameWnd);
パラメーター
pFrameWnd
破棄するインプレース フレーム ウィンドウへのポインター。
解説
これは、高度なオーバーライドが可能です。
COleServerDoc::D iscardUndoState
ユーザーが元に戻すことができない編集操作を実行する場合は、この関数を呼び出して、コンテナー アプリケーションで元に戻す状態情報を破棄するように強制します。
BOOL DiscardUndoState();
戻り値
正常に完了した場合はゼロ以外、それ以外の場合は 0 です。
解説
この関数は、元に戻すをサポートするサーバーが、使用できない元に戻す状態情報によって使用されるリソースを解放できるように提供されます。
COleServerDoc::GetClientSite
基になる IOleClientSite
インターフェイスへのポインターを取得します。
LPOLECLIENTSITE GetClientSite() const;
戻り値
基になる IOleClientSite インターフェイスへのポインターを取得します。
COleServerDoc::GetDocObjectServer
新しい CDocObjectServer
項目を作成し、その項目へのポインターを返すには、この関数をオーバーライドします。
virtual CDocObjectServer* GetDocObjectServer(LPOLEDOCUMENTSITE pDocSite);
パラメーター
pDocSite
このドキュメントをサーバーに接続する IOleDocumentSite
インターフェイスへのポインター。
戻り値
CDocObjectServer
へのポインター。操作が失敗した場合は NULL。
解説
DocObject サーバーがアクティブ化されると、NULL 以外のポインターの戻り値は、クライアントが DocObject をサポートできることを示します。 既定の実装では、NULL が返されます。
DocObjects をサポートするドキュメントの一般的な実装では、新しい CDocObjectServer
オブジェクトを割り当てて呼び出し元に返すだけです。 次に例を示します。
CDocObjectServer* CMFCOleServerDoc::GetDocObjectServer(LPOLEDOCUMENTSITE pSite)
{
return new CDocObjectServer(this, pSite);
}
COleServerDoc::GetEmbeddedItem
ドキュメント全体を表す項目へのポインターを取得するには、この関数を呼び出します。
COleServerItem* GetEmbeddedItem();
戻り値
ドキュメント全体を表す項目へのポインター。操作が失敗した場合は NULL。
解説
既定の実装のない仮想関数 COleServerDoc::OnGetEmbeddedItem を呼び出します。
COleServerDoc::GetItemClipRect
GetItemClipRect
メンバー関数を呼び出して、編集中のアイテムのクリッピング四角形座標を取得します。
void GetItemClipRect(LPRECT lpClipRect) const;
パラメーター
lpClipRect
項目のクリッピング四角形座標を受け取る RECT
構造体または CRect
オブジェクトへのポインター。
解説
座標は、コンテナー アプリケーション ウィンドウのクライアント領域を基準としたピクセル単位です。
クリッピング四角形の外側に描画を行うべきではありません。 通常、描画は自動的に制限されます。 この関数を使用して、ユーザーがドキュメントの表示部分の外側にスクロールしたかどうかを確認します。その場合は、 ScrollContainerBy の呼び出しによって、必要に応じてコンテナー ドキュメントをスクロールします。
COleServerDoc::GetItemPosition
GetItemPosition
メンバー関数を呼び出して、編集中のアイテムの座標を取得します。
void GetItemPosition(LPRECT lpPosRect) const;
パラメーター
lpPosRect
アイテムの座標を受け取る RECT
構造体または CRect
オブジェクトへのポインター。
解説
座標は、コンテナー アプリケーション ウィンドウのクライアント領域を基準としたピクセル単位です。
項目の位置を現在のクリッピング四角形と比較して、画面上で項目が表示される (または表示されない) 範囲を決定できます。
COleServerDoc::GetZoomFactor
GetZoomFactor
メンバー関数は、インプレース編集用にアクティブ化されたアイテムの "ズーム係数" を決定します。
BOOL GetZoomFactor(
LPSIZE lpSizeNum = NULL,
LPSIZE lpSizeDenom = NULL,
LPCRECT lpPosRect = NULL) const;
パラメーター
lpSizeNum
ズーム係数の分子を保持するクラス CSize
のオブジェクトへのポインター。 NULL にすることができます。
lpSizeDenom
ズーム係数の分母を保持するクラス CSize
のオブジェクトへのポインター。 NULL にすることができます。
lpPosRect
項目の新しい位置を記述するクラス CRect
のオブジェクトへのポインター。 この引数が NULL の場合、関数は項目の現在位置を使用します。
戻り値
アイテムがインプレース編集のためにアクティブ化され、そのズーム係数が 100% (1:1) 以外の場合は 0 以外。それ以外の場合は 0。
解説
ズーム係数 (ピクセル単位) は、アイテムのサイズと現在の範囲の比率です。 コンテナー アプリケーションが項目のエクステントを設定していない場合は、その自然なエクステント ( COleServerItem::OnGetExtent によって決定されます) が使用されます。
この関数は、最初の 2 つの引数を、項目の "ズーム係数" の分子と分母に設定します。項目が正しく編集されていない場合、関数はこれらの引数を既定値の 100% (または 1:1) に設定し、0 を返します。 詳細については、テクニカル ノート 40、 MFC/OLE インプレース サイズ変更とズームを参照してください。
COleServerDoc::IsDocObject
ドキュメントが DocObject であるかどうかを判断します。
BOOL IsDocObject() const;
戻り値
ドキュメントが DocObject の場合は TRUE。それ以外の場合は FALSE。
COleServerDoc::IsEmbedded
IsEmbedded
メンバー関数を呼び出して、ドキュメントがコンテナーに埋め込まれたオブジェクトを表しているかどうかを判断します。
BOOL IsEmbedded() const;
戻り値
COleServerDoc
オブジェクトがコンテナーに埋め込まれたオブジェクトを表すドキュメントの場合は 0 以外、それ以外の場合は 0。
解説
ファイルから読み込まれたドキュメントは埋め込まれませんが、コンテナー アプリケーションによってリンクとして操作される可能性があります。 コンテナー ドキュメントに埋め込まれているドキュメントは、埋め込まれていると見なされます。
COleServerDoc::IsInPlaceActive
IsInPlaceActive
メンバー関数を呼び出して、アイテムが現在インプレースアクティブ状態であるかどうかを判断します。
BOOL IsInPlaceActive() const;
戻り値
COleServerDoc
オブジェクトがアクティブな場合は 0 以外、それ以外の場合は 0。
COleServerDoc::NotifyChanged
この関数を呼び出して、ドキュメントに接続されているすべてのリンクアイテムにドキュメントが変更されたことを通知します。
void NotifyChanged();
解説
通常、この関数は、ユーザーがサーバー ドキュメントのディメンションなどのグローバル属性を変更した後に呼び出します。 OLE アイテムが自動リンクを使用してドキュメントにリンクされている場合、変更を反映するようにアイテムが更新されます。 Microsoft Foundation クラス ライブラリで記述されたコンテナー アプリケーションでは、COleClientItem
の OnChange メンバー関数が呼び出されます。
Note
この関数は、OLE 1 との互換性のために含まれています。 新しいアプリケーションでは、 UpdateAllItems を使用する必要があります。
COleServerDoc::NotifyClosed
この関数を呼び出して、ドキュメントが閉じられたことをコンテナーに通知します。
void NotifyClosed();
解説
ユーザーが [ファイル] メニューから [閉じる] コマンドを選択すると、 NotifyClosed
は COleServerDoc
の OnCloseDocument メンバー関数の実装によって呼び出されます。 Microsoft Foundation クラス ライブラリで記述されたコンテナー アプリケーションでは、COleClientItem
の OnChange メンバー関数が呼び出されます。
COleServerDoc::NotifyRename
ユーザーがサーバー ドキュメントの名前を変更した後、この関数を呼び出します。
void NotifyRename(LPCTSTR lpszNewName);
パラメーター
lpszNewName
サーバー ドキュメントの新しい名前を指定する文字列へのポインター。これは通常、完全修飾パスです。
解説
ユーザーが [ファイル] メニューから [名前を付けて保存] コマンドを選択すると、 NotifyRename
は COleServerDoc
の OnSaveDocument メンバー関数の実装によって呼び出されます。 この関数は OLE システム DLL に通知し、次にコンテナーに通知します。 Microsoft Foundation クラス ライブラリで記述されたコンテナー アプリケーションでは、COleClientItem
の OnChange メンバー関数が呼び出されます。
COleServerDoc::NotifySaved
ユーザーがサーバー ドキュメントを保存した後、この関数を呼び出します。
void NotifySaved();
解説
ユーザーが [ファイル] メニューから [保存] コマンドを選択すると、NotifySaved
は、OnSaveDocument の実装COleServerDoc
によって呼び出されます。 この関数は OLE システム DLL に通知し、次にコンテナーに通知します。 Microsoft Foundation クラス ライブラリで記述されたコンテナー アプリケーションでは、COleClientItem
の OnChange メンバー関数が呼び出されます。
COleServerDoc::OnClose
コンテナーがサーバー ドキュメントを閉じる要求を行ったときにフレームワークによって呼び出されます。
virtual void OnClose(OLECLOSE dwCloseOption);
パラメーター
dwCloseOption
列挙 OLECLOSE の値。 このパラメーターには、次のいずれかの値を指定できます。
OLECLOSE_SAVEIFDIRTY ファイルが変更されている場合は保存されます。
OLECLOSE_NOSAVE ファイルは保存されずに閉じられます。
OLECLOSE_PROMPTSAVE ファイルが変更されている場合は、ファイルの保存を求めるメッセージが表示されます。
解説
既定の実装では、 CDocument::OnCloseDocument
が呼び出されます。
詳細と追加の値については、Windows SDK の「 OLECLOSE 」を参照してください。
COleServerDoc::OnDeactivate
ユーザーが現在アクティブな埋め込みまたはリンクされたアイテムを非アクティブ化すると、フレームワークによって呼び出されます。
virtual void OnDeactivate();
解説
この関数は、コンテナー アプリケーションのユーザー インターフェイスを元の状態に復元し、インプレース アクティブ化のために作成されたメニューやその他のコントロールを破棄します。
元に戻す状態情報は、この時点で無条件に解放する必要があります。
詳細については、 Activation に関する記事を参照してください。
COleServerDoc::OnDeactivateUI
ユーザーがインプレースでアクティブ化されたアイテムを非アクティブ化するときに呼び出されます。
virtual void OnDeactivateUI(BOOL bUndoable);
パラメーター
bUndoable
編集の変更を元に戻すことができるかどうかを指定します。
解説
この関数は、コンテナー アプリケーションのユーザー インターフェイスを元の状態に戻し、インプレース アクティブ化のために作成されたメニューやその他のコントロールを非表示にします。
フレームワークは常に bUndoable を FALSE に設定します。 サーバーで元に戻す操作がサポートされていて、元に戻すことができる操作がある場合は、 bUndoable を TRUE に設定して基底クラスの実装を呼び出します。
COleServerDoc::OnDocWindowActivate
フレームワークは、この関数を呼び出して、インプレース編集のためにドキュメント ウィンドウをアクティブ化または非アクティブ化します。
virtual void OnDocWindowActivate(BOOL bActivate);
パラメーター
bActivate
ドキュメント ウィンドウをアクティブ化するか非アクティブ化するかを指定します。
解説
既定の実装では、必要に応じてフレーム レベルのユーザー インターフェイス要素を削除または追加します。 アイテムを含むドキュメントがアクティブ化または非アクティブ化されたときに追加のアクションを実行する場合は、この関数をオーバーライドします。
詳細については、 Activation に関する記事を参照してください。
COleServerDoc::OnExecOleCmd
フレームワークはこの関数を呼び出して、指定されたコマンドを実行するか、コマンドのヘルプを表示します。
virtual HRESULT OnExecOleCmd(
const GUID* pguidCmdGroup,
DWORD nCmdID,
DWORD nCmdExecOpt,
VARIANTARG* pvarargIn,
VARIANTARG* pvarargOut);
パラメーター
pguidCmdGroup
一連のコマンドを識別する GUID へのポインター。 既定のコマンド グループを示すには NULL を指定できます。
nCmdID
実行するコマンドです。 pguidCmdGroup で識別されるグループに含まれている必要があります。
nCmdExecOut
オブジェクトがコマンドを実行する方法。OLECMDEXECOPT 列挙型の次の値の 1 つ以上。
OLECMDEXECOPT_DODEFAULT
OLECMDEXECOPT_PROMPTUSER
OLECMDEXECOPT_DONTPROMPTUSER
OLECMDEXECOPT_SHOWHELP
pvarargIn
コマンドの入力引数を含む VARIANTARG へのポインター。 NULL にすることができます。
pvarargOut
コマンドから出力戻り値を受け取る VARIANTARG へのポインター。 NULL にすることができます。
戻り値
成功した場合はS_OKを返します。それ以外の場合は、次のいずれかのエラー コードが表示されます。
Value | 説明 |
---|---|
E_UNEXPECTED | 予期しないエラーが発生しました |
E_FAIL | エラーが発生しました |
E_NOTIMPL | MFC 自体がコマンドの変換とディスパッチを試みる必要があることを示します |
OLECMDERR_E_UNKNOWNGROUP | pguidCmdGroup は NULL 以外ですが、認識されたコマンド グループは指定しません |
OLECMDERR_E_NOTSUPPORTED | nCmdID がグループ pguidCmdGroup の有効なコマンドとして認識されない |
OLECMDERR_DISABLED | nCmdID によって識別されるコマンドは無効であり、実行できません |
OLECMDERR_NOHELP | 呼び出し元は、 nCmdID で識別されるコマンドに関するヘルプを要求しましたが ヘルプは使用できません |
OLECMDERR_CANCELED | ユーザーが実行を取り消した |
解説
COleCmdUI
を使用して、DocObject ユーザー インターフェイス コマンドのその他のプロパティを有効、更新、および設定できます。 コマンドが初期化されたら、 OnExecOleCmd
を使用してコマンドを実行できます。
フレームワークは、OLE ドキュメント コマンドを翻訳およびディスパッチする前に関数を呼び出します。 標準の OLE ドキュメント コマンドを処理するためにこの関数をオーバーライドする必要はありませんが、独自のカスタム コマンドを処理したり、パラメーターを受け取ったり結果を返したりするコマンドを処理する場合は、この関数にオーバーライドを指定する必要があります。
ほとんどのコマンドは引数や戻り値を受け取りません。 ほとんどのコマンドの場合、呼び出し元は pvarargIn および pvarargOut の NULL を渡すことができます。 入力値を想定するコマンドの場合、呼び出し元は VARIANTARG 変数を宣言して初期化し、 pvarargIn 内の変数へのポインターを渡すことができます。 1 つの値を必要とするコマンドの場合、引数を VARIANTARG に直接格納し、関数に渡すことができます。 サポートされている型 ( IDispatch
や SAFEARRAY など) のいずれかを使用して、VARIANTARG 内に複数の引数をパッケージ化する必要があります。
同様に、コマンドが引数を返す場合、呼び出し元は VARIANTARG を宣言し、それをVT_EMPTYに初期化し、そのアドレスを pvarargOut で渡すことが期待されます。 コマンドから 1 つの値が返された場合、オブジェクトはその値を pvarargOut に直接格納できます。 VARIANTARG に適した方法で複数の出力値をパッケージ化する必要があります。
この関数の基底クラスの実装では、コマンド ターゲットに関連付けられているOLE_COMMAND_MAP構造体について説明し、適切なハンドラーにコマンドをディスパッチしようとします。 基底クラスの実装は、引数または戻り値を受け取らないコマンドでのみ機能します。 引数または戻り値を受け入れるコマンドを処理する必要がある場合は、この関数をオーバーライドし、 pvarargIn および pvarargOut パラメーターを自分で操作する必要があります。
COleServerDoc::OnFrameWindowActivate
フレームワークは、コンテナー アプリケーションのフレーム ウィンドウがアクティブ化または非アクティブ化されるときに、この関数を呼び出します。
virtual void OnFrameWindowActivate(BOOL bActivate);
パラメーター
bActivate
フレーム ウィンドウをアクティブにするか非アクティブにするかを指定します。
解説
既定の実装では、フレーム ウィンドウが存在する可能性があるヘルプ モードが取り消されます。 フレーム ウィンドウのアクティブ化または非アクティブ化時に特別な処理を実行する場合は、この関数をオーバーライドします。
詳細については、 Activation に関する記事を参照してください。
COleServerDoc::OnGetEmbeddedItem
コンテナー アプリケーションがサーバー アプリケーションを呼び出して埋め込みアイテムを作成または編集するときにフレームワークによって呼び出されます。
virtual COleServerItem* OnGetEmbeddedItem() = 0;
戻り値
ドキュメント全体を表す項目へのポインター。操作が失敗した場合は NULL。
解説
既定の実装はありません。 ドキュメント全体を表すアイテムを返すには、この関数をオーバーライドする必要があります。 この戻り値は、 COleServerItem
派生クラスのオブジェクトである必要があります。
COleServerDoc::OnReactivateAndUndo
フレームワークは、ユーザーが、その場でアクティブ化、変更、その後非アクティブ化されたアイテムに加えられた変更を元に戻す場合に、この関数を呼び出します。
virtual BOOL OnReactivateAndUndo();
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
既定の実装では、エラーを示す FALSE を返す以外は何も行われません。
アプリケーションで元に戻す機能がサポートされている場合は、この関数をオーバーライドします。 通常は、元に戻す操作を実行し、 ActivateInPlace
を呼び出して項目をアクティブにします。 コンテナー アプリケーションが Microsoft Foundation Class Library で記述されている場合、 COleClientItem::ReactivateAndUndo
を呼び出すと、この関数が呼び出されます。
COleServerDoc::OnResizeBorder
フレームワークは、コンテナー アプリケーションのフレーム ウィンドウのサイズが変更されたときに、この関数を呼び出します。
virtual void OnResizeBorder(
LPCRECT lpRectBorder,
LPOLEINPLACEUIWINDOW lpUIWindow,
BOOL bFrame);
パラメーター
lpRectBorder
RECT
構造体または境界線の座標を指定するCRect
オブジェクトへのポインター。
lpUIWindow
現在のインプレース編集セッションを所有するクラス IOleInPlaceUIWindow
のオブジェクトへのポインター。
bFrame
lpUIWindowがコンテナー アプリケーションの最上位フレーム ウィンドウを指す場合は TRUE、コンテナー アプリケーションのドキュメント レベルのフレーム ウィンドウlpUIWindow の場合は FALSE。
解説
この関数は、新しいウィンドウ サイズに応じて、ツール バーやその他のユーザー インターフェイス要素のサイズを変更および調整します。
詳細については、Windows SDK の「 IOleInPlaceUIWindow 」を参照してください。
これは、高度なオーバーライドが可能です。
COleServerDoc::OnSetHostNames
コンテナーがこのドキュメントのホスト名を設定または変更するときにフレームワークによって呼び出されます。
virtual void OnSetHostNames(
LPCTSTR lpszHost,
LPCTSTR lpszHostObj);
パラメーター
lpszHost
コンテナー アプリケーションの名前を指定する文字列へのポインター。
lpszHostObj
ドキュメントのコンテナーの名前を指定する文字列へのポインター。
解説
既定の実装では、このドキュメントを参照するすべてのビューのドキュメント タイトルが変更されます。
アプリケーションが別のメカニズムを使用してタイトルを設定する場合は、この関数をオーバーライドします。
COleServerDoc::OnSetItemRects
フレームワークは、この関数を呼び出して、コンテナー アプリケーションのフレーム ウィンドウ内にインプレース編集フレーム ウィンドウを配置します。
virtual void OnSetItemRects(
LPCRECT lpPosRect,
LPCRECT lpClipRect);
パラメーター
lpPosRect
コンテナー アプリケーションのクライアント領域に対するインプレース フレーム ウィンドウの位置を指定する、 RECT
構造体または CRect
オブジェクトへのポインター。
lpClipRect
コンテナー アプリケーションのクライアント領域に対するインプレース フレーム ウィンドウのクリッピング四角形を指定する、 RECT
構造体または CRect
オブジェクトへのポインター。
解説
必要に応じて、ビューのズーム係数を更新するには、この関数をオーバーライドします。
この関数は通常、 RequestPositionChange
呼び出しに応答して呼び出されますが、インプレースアイテムの位置変更を要求するためにコンテナーによっていつでも呼び出すことができます。
COleServerDoc::OnShowControlBars
フレームワークは、この関数を呼び出して、 pFrameWnd で識別されるフレーム ウィンドウに関連付けられたサーバー アプリケーションのコントロール バーを表示または非表示にします。
virtual void OnShowControlBars(
CFrameWnd* pFrameWnd,
BOOL bShow);
パラメーター
pFrameWnd
コントロール バーを非表示または表示する必要があるフレーム ウィンドウへのポインター。
bShow
コントロール バーを表示するか非表示にするかを指定します。
解説
既定の実装では、そのフレーム ウィンドウによって所有されているすべてのコントロール バーが列挙され、非表示または表示されます。
COleServerDoc::OnShowDocument
フレームワークは、サーバー ドキュメントを非表示または表示する必要がある場合に、 OnShowDocument
関数を呼び出します。
virtual void OnShowDocument(BOOL bShow);
パラメーター
bShow
ドキュメントへのユーザー インターフェイスを表示するか非表示にするかを指定します。
解説
bShow が TRUE の場合、既定の実装では、必要に応じてサーバー アプリケーションがアクティブ化され、コンテナー アプリケーションがそのウィンドウをスクロールして項目が表示されるようになります。 bShow が FALSE の場合、既定の実装では、OnDeactivate
の呼び出しによって項目が非アクティブ化され、最初のフレーム ウィンドウを除き、ドキュメント用に作成されたすべてのフレーム ウィンドウが破棄または非表示になります。 表示されているドキュメントが残っていない場合、既定の実装ではサーバー アプリケーションが非表示になります。
COleServerDoc::OnUpdateDocument
複合ドキュメントに埋め込まれた項目であるドキュメントを保存するときに、フレームワークによって呼び出されます。
virtual BOOL OnUpdateDocument();
戻り値
ドキュメントが正常に更新された場合は 0 以外。それ以外の場合は 0。
解説
既定の実装では、 COleServerDoc::NotifySaved および COleServerDoc::SaveEmbedding メンバー関数を呼び出し、ドキュメントをクリーンとしてマークします。 埋め込み項目を更新するときに特別な処理を実行する場合は、この関数をオーバーライドします。
COleServerDoc::RequestPositionChange
コンテナー アプリケーションで項目の位置を変更するには、このメンバー関数を呼び出します。
void RequestPositionChange(LPCRECT lpPosRect);
パラメーター
lpPosRect
RECT
構造体または項目の新しい位置を含むCRect
オブジェクトへのポインター。
解説
この関数は、通常、インプレースアクティブアイテムのデータが変更されたときに( UpdateAllItems
と組み合わせて)呼び出されます。 この呼び出しの後、コンテナーは、 OnSetItemRects
を呼び出すことによって変更を実行する場合と実行しない場合があります。 結果の位置は、要求された位置とは異なる場合があります。
COleServerDoc::SaveEmbedding
この関数を呼び出して、埋め込みオブジェクトを保存するようにコンテナー アプリケーションに指示します。
void SaveEmbedding();
解説
この関数は、 OnUpdateDocument
から自動的に呼び出されます。 この関数により、項目がディスク上で更新されるため、通常は特定のユーザー アクションの結果としてのみ呼び出されることに注意してください。
COleServerDoc::ScrollContainerBy
ScrollContainerBy
メンバー関数を呼び出して、コンテナー ドキュメントをピクセル単位でスクロールsizeScroll
。
BOOL ScrollContainerBy(CSize sizeScroll);
パラメーター
sizeScroll
コンテナー ドキュメントがスクロールする距離を示します。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
正の値は、下にスクロールして右にスクロールすることを示します。負の値は、上下にスクロールすることを示します。
COleServerDoc::UpdateAllItems
この関数を呼び出して、ドキュメントに接続されているすべてのリンクアイテムにドキュメントが変更されたことを通知します。
void UpdateAllItems(
COleServerItem* pSender,
LPARAM lHint = 0L,
CObject* pHint = NULL,
DVASPECT nDrawAspect = DVASPECT_CONTENT);
パラメーター
pSender
ドキュメントを変更したアイテムへのポインター。すべてのアイテムを更新する場合は NULL。
lHint
変更に関する情報を格納します。
pHint
変更に関する情報を格納しているオブジェクトへのポインター。
nDrawAspect
アイテムの描画方法を決定します。 これは DVASPECT 列挙型の値です。 このパラメーターには、次のいずれかの値を指定できます。
DVASPECT_CONTENT項目は、コンテナー内の埋め込みオブジェクトとして表示できるように表されます。
DVASPECT_THUMBNAILアイテムは、閲覧ツールに表示できるように、"サムネイル" 表現でレンダリングされます。
DVASPECT_ICON項目はアイコンで表されます。
DVASPECT_DOCPRINT項目は、[ファイル] メニューの [印刷] コマンドを使用して印刷されたかのように表されます。
解説
通常、この関数は、ユーザーがサーバー ドキュメントを変更した後に呼び出します。 OLE アイテムが自動リンクを使用してドキュメントにリンクされている場合、変更を反映するようにアイテムが更新されます。 Microsoft Foundation クラス ライブラリで記述されたコンテナー アプリケーションでは、COleClientItem
の OnChange メンバー関数が呼び出されます。
この関数は、pHint、lHint、および nDrawAspect を渡して、送信アイテムを除くドキュメントの各アイテムに対してOnUpdate
メンバー関数を呼び出します。 これらのパラメーターを使用して、ドキュメントに加えられた変更に関する情報をアイテムに渡します。 lHintを使用して情報をエンコードするかCObject
派生クラスを定義して変更に関する情報を格納し、pHint を使用してそのクラスのオブジェクトを渡すことができます。 COleServerItem
派生クラスのOnUpdate
メンバー関数をオーバーライドして、プレゼンテーションが変更されたかどうかに応じて各項目の更新を最適化します。
関連項目
MFC サンプル HIERSVR
COleLinkingDoc クラス
階層図
COleDocument クラス
COleLinkingDoc クラス
COleTemplateServer クラス