COleServerDoc 类

OLE 服务器文档的基类。

语法

class AFX_NOVTABLE COleServerDoc : public COleLinkingDoc

成员

公共构造函数

名称 描述
COleServerDoc::COleServerDoc 构造 COleServerDoc 对象。

公共方法

名称 描述
COleServerDoc::ActivateDocObject 激活关联的 DocObject 文档。
COleServerDoc::ActivateInPlace 激活文档进行就地编辑。
COleServerDoc::DeactivateAndUndo 停用服务器的用户界面。
COleServerDoc::DiscardUndoState 放弃撤消状态信息。
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::DestroyInPlaceFrame 由框架调用以销毁用于就地编辑的框架窗口。
COleServerDoc::GetDocObjectServer 重写此函数以创建新的 CDocObjectServer 对象,并指示此文档是 DocObject 容器。
COleServerDoc::OnClose 当容器请求关闭文档时由框架调用。
COleServerDoc::OnExecOleCmd 执行指定的命令或显示命令帮助。
COleServerDoc::OnFrameWindowActivate 当激活或停用容器的框架窗口时,由框架调用。
COleServerDoc::OnGetEmbeddedItem 调用以获取表示整个文档的 COleServerItem;用于获取嵌入项。 需要实现。
COleServerDoc::OnReactivateAndUndo 由框架调用,以撤消在就地编辑期间所做的更改。
COleServerDoc::OnSetHostNames 当容器设置嵌入对象的窗口标题时,由框架调用。
COleServerDoc::OnSetItemRects 由框架调用,以将就地编辑框架窗口放置在容器应用程序的窗口中。
COleServerDoc::OnShowDocument 由框架调用以显示或隐藏文档。

注解

服务器文档可以包含 COleServerItem 对象,这些对象表示嵌入项或链接项的服务器接口。 当容器启动服务器应用程序以编辑嵌入项时,该项将作为自己的服务器文档加载;COleServerDoc 对象仅包含一个 COleServerItem 对象,后者由整个文档组成。 当容器启动服务器应用程序以编辑链接项时,会从磁盘加载现有文档;一部分文档内容突出显示,以指示链接项。

COleServerDoc 对象还可以包含 COleClientItem 类的项。 这允许你创建容器服务器应用程序。 框架提供在为 COleServerItem 对象提供服务时正确存储 COleClientItem 项的函数。

如果服务器应用程序不支持链接,服务器文档将始终只包含一个服务器项,该项将整个嵌入对象表示为一个文档。 如果服务器应用程序支持链接,则每次将所选内容复制到剪贴板时,它都必须创建一个服务器项。

若要使用 COleServerDoc,请从其派生一个类并实现 OnGetEmbeddedItem 成员函数,该函数允许服务器支持嵌入项。 从 COleServerItem 派生类以实现文档中的项,并从 OnGetEmbeddedItem 返回该类的对象。

为了支持链接项,COleServerDoc 提供了 OnGetLinkedItem 成员函数。 你可以使用默认实现,或者如果你有自己的文档项管理方式,也可以重写此函数。

应用程序支持的每种服务器文档都需要一个 COleServerDoc 派生类。 例如,如果服务器应用程序支持工作表和图表,则需要两个 COleServerDoc 派生类。

有关服务器的详细信息,请参阅服务器:实现服务器一文。

继承层次结构

CObject

CCmdTarget

CDocument

COleDocument

COleLinkingDoc

COleServerDoc

要求

标头:afxole.h

COleServerDoc::ActivateDocObject

激活关联的 DocObject 文档。

void ActivateDocObject();

备注

默认情况下,COleServerDoc 不支持活动文档(也称为 DocObject)。 若要启用此支持,请参阅 GetDocObjectServer 和类 CDocObjectServer

COleServerDoc::ActivateInPlace

激活项进行就地编辑。

BOOL ActivateInPlace();

返回值

如果成功,则为非零;否则为 0,表示该项已完全打开。

备注

此函数将执行就地激活所需的所有操作。 它会创建一个就地框架窗口,将其激活并根据项调整大小,设置共享菜单和其他控件,将项滚动到视图中,并将焦点设置为就地框架窗口。

此函数由 COleServerItem::OnShow 的默认实现调用。 如果应用程序支持用于就地激活的另一个谓词(如 Play),请调用此函数。

COleServerDoc::COleServerDoc

构造 COleServerDoc 对象而不连接 OLE 系统 DLL。

COleServerDoc();

备注

必须调用 COleLinkingDoc::Register 才能打开与 OLE 的通信。 如果在应用程序中使用 COleTemplateServerCOleLinkingDocOnNewDocumentOnOpenDocumentOnSaveDocument 实现会为你调用 COleLinkingDoc::Register

COleServerDoc::CreateInPlaceFrame

框架调用此函数以创建用于就地编辑的框架窗口。

virtual COleIPFrameWnd* CreateInPlaceFrame(CWnd* pParentWnd);

参数

pParentWnd
指向容器应用程序父窗口的指针。

返回值

指向就地框架窗口的指针;如果失败,则为 NULL。

备注

默认实现使用文档模板中指定的信息来创建框架。 所用视图是为文档创建的第一个视图。 此视图暂时与原始框架分离并附加到新创建的框架。

这是一个高级可重写函数。

COleServerDoc::DeactivateAndUndo

如果应用程序支持撤消,并且用户在激活项之后、编辑项之前选择撤消,则调用此函数。

BOOL DeactivateAndUndo();

返回值

若成功,则为非零;否则为 0。

备注

如果容器应用程序是使用 Microsoft 基础类库编写的,则调用此函数会导致调用 COleClientItem::OnDeactivateAndUndo,从而停用服务器的用户界面。

COleServerDoc::DestroyInPlaceFrame

框架调用此函数以销毁就地框架窗口,并将服务器应用程序的文档窗口恢复为就地激活前的状态。

virtual void DestroyInPlaceFrame(COleIPFrameWnd* pFrameWnd);

参数

pFrameWnd
指向要销毁的就地框架窗口的指针。

备注

这是一个高级可重写函数。

COleServerDoc::DiscardUndoState

如果用户执行了无法撤消的编辑操作,可调用此函数强制容器应用程序放弃其撤消状态信息。

BOOL DiscardUndoState();

返回值

若成功,则为非零;否则为 0。

备注

提供此函数是为了使支持撤消的服务器可以释放资源,否则这些资源会被无法使用的撤消状态信息占用。

COleServerDoc::GetClientSite

检索指向基础 IOleClientSite 接口的指针。

LPOLECLIENTSITE GetClientSite() const;

返回值

检索指向基础 IOleClientSite 接口的指针。

COleServerDoc::GetDocObjectServer

重写此函数以创建新的 CDocObjectServer 项并返回指向它的指针。

virtual CDocObjectServer* GetDocObjectServer(LPOLEDOCUMENTSITE pDocSite);

参数

pDocSite
指向 IOleDocumentSite 接口的指针,该接口将此文档连接到服务器。

返回值

指向 CDocObjectServer 的指针;如果操作失败,则为 NULL。

备注

激活 DocObject 服务器时,如果返回非空指针,则表示客户端可以支持 DocObject。 默认实现返回 NULL。

支持 DocObject 的文档的典型实现将简单地分配一个新的 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
一个指针,指向 CRect 结构或 RECT 对象以接收项坐标。

注解

坐标相对于容器应用程序窗口的工作区(以像素为单位)。

可以将项的位置与当前剪辑矩形进行比较,确定项在屏幕上的可见(或不可见)范围。

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。

备注

缩放系数(以像素为单位)是项大小与其当前范围的比例。 如果容器应用程序未设置项的范围,则使用其原始范围(由 COleServerItem::OnGetExtent 确定)。

该函数将其前两个参数设置为项的“缩放系数”的分子和分母。如果未就地编辑项,则该函数将这些参数设置为默认值 100%(或 1:1)并返回零。 有关详细信息,请参阅技术说明 40 MFC/OLE 就地调整大小和缩放

COleServerDoc::IsDocObject

确定文档是否为 DocObject。

BOOL IsDocObject() const;

返回值

如果文档为 DocObject,则为 TRUE;否则为 FALSE。

COleServerDoc::IsEmbedded

调用 IsEmbedded 成员函数以确定文档是否表示嵌入在容器中的对象。

BOOL IsEmbedded() const;

返回值

如果 COleServerDoc 对象是表示嵌入在容器中的对象的文档,则为非零;否则为 0。

备注

从文件加载的文档不会被嵌入,不过容器应用程序可能会将其作为链接操作。 嵌入在容器文档中的文档被视为嵌入文档。

COleServerDoc::IsInPlaceActive

调用 IsInPlaceActive 成员函数以确定项当前是否处于就地活动状态。

BOOL IsInPlaceActive() const;

返回值

如果 COleServerDoc 对象处于就地活动状态,则为非零;否则为 0。

COleServerDoc::NotifyChanged

调用此函数以通知所有连接到文档的链接项该文档已更改。

void NotifyChanged();

备注

通常,在用户更改某些全局属性(例如服务器文档的维度)后调用此函数。 如果 OLE 项通过自动链接链接到文档,则会更新该项以反映更改。 在使用 Microsoft 基础类库编写的容器应用程序中,调用 COleClientItemOnChange 成员函数。

注意

提供此函数是为了与 OLE 1 兼容。 新应用程序应使用 UpdateAllItems

COleServerDoc::NotifyClosed

调用此函数以通知容器文档已关闭。

void NotifyClosed();

备注

当用户从“文件”菜单中选择“关闭”命令时,COleServerDocOnCloseDocument 成员函数实现会调用 NotifyClosed。 在使用 Microsoft 基础类库编写的容器应用程序中,调用 COleClientItemOnChange 成员函数。

COleServerDoc::NotifyRename

在用户重命名服务器文档后调用此函数。

void NotifyRename(LPCTSTR lpszNewName);

参数

lpszNewName
指向字符串的指针,该字符串指定服务器文档的新名称;这通常是完全限定的路径。

备注

当用户从“文件”菜单中选择“另存为”命令时,COleServerDocOnSaveDocument 成员函数实现会调用 NotifyRename。 此函数通知 OLE 系统 DLL,后者又通知容器。 在使用 Microsoft 基础类库编写的容器应用程序中,调用 COleClientItemOnChange 成员函数。

COleServerDoc::NotifySaved

在用户保存服务器文档后调用此函数。

void NotifySaved();

注解

当用户从“文件”菜单中选择“保存”命令时,COleServerDocOnSaveDocument 实现会调用 NotifySaved。 此函数通知 OLE 系统 DLL,后者又通知容器。 在使用 Microsoft 基础类库编写的容器应用程序中,调用 COleClientItemOnChange 成员函数。

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();

备注

此函数将容器应用程序的用户界面恢复为原始状态,并销毁为就地激活创建的任何菜单和其他控件。

此时应无条件释放撤消状态信息。

有关详细信息,请参阅激活一文。

COleServerDoc::OnDeactivateUI

当用户停用就地激活的项时调用。

virtual void OnDeactivateUI(BOOL bUndoable);

参数

bUndoable
指定编辑更改是否可撤消。

备注

此函数将容器应用程序的用户界面还原为其原始状态,隐藏为就地激活创建的任何菜单和其他控件。

框架始终将 bUndoable 设置为 FALSE。 如果服务器支持撤消并且有可以撤消的操作,则调用基类实现并将 bUndoable 设置为 TRUE。

COleServerDoc::OnDocWindowActivate

框架调用此函数以激活或停用用于就地编辑的文档窗口。

virtual void OnDocWindowActivate(BOOL bActivate);

参数

bActivate
指定是激活还是停用文档窗口。

注解

默认实现会根据需要移除或添加框架级用户界面元素。 如果要在激活或停用包含项的文档时执行其他操作,请重写此函数。

有关详细信息,请参阅激活一文。

COleServerDoc::OnExecOleCmd

框架调用此函数来执行指定的命令或显示命令帮助。

virtual HRESULT OnExecOleCmd(
    const GUID* pguidCmdGroup,
    DWORD nCmdID,
    DWORD nCmdExecOpt,
    VARIANTARG* pvarargIn,
    VARIANTARG* pvarargOut);

参数

pguidCmdGroup
一个指针,指向标识一组命令的 GUID。 可以为 NULL,以指示默认命令组。

nCmdID
要执行的命令。 必须位于 pguidCmdGroup 标识的组中

nCmdExecOut
对象应执行命令的方式,OLECMDEXECOPT 枚举中的以下一个或多个值:

OLECMDEXECOPT_DODEFAULT

OLECMDEXECOPT_PROMPTUSER

OLECMDEXECOPT_DONTPROMPTUSER

OLECMDEXECOPT_SHOWHELP

pvarargIn
一个指针,指向包含命令输入参数的 VARIANTARG。 可以为 NULL。

pvarargOut
一个指针,指向 VARIANTARG 以接收命令的输出返回值。 可以为 NULL。

返回值

如果成功,则返回 S_OK;否则返回以下错误代码之一:

说明
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 中的变量。 对于需要单个值的命令,参数可以直接存储在 VARIANTARG 中并传递给函数。 必须使用一种受支持的类型(例如 IDispatch 和 SAFEARRAY)将多个参数打包在 VARIANTARG 中。

同样,如果命令返回参数,调用方应声明一个 VARIANTARG,将其初始化为 VT_EMPTY,并在 pvarargOut 中传递其地址。 如果命令返回单个值,则对象可以将该值直接存储在 pvarargOut 中。 多个输出值必须以适合 VARIANTARG 的某种方式打包。

此函数的基类实现将遍历与命令目标关联的 OLE_COMMAND_MAP 结构,并尝试将命令调度到适当的处理程序。 基类实现仅适用于不接受参数或返回值的命令。 如果需要处理接受参数或返回值的命令,则必须重写此函数并自行使用 pvarargIn 和 pvarargOut 参数。

COleServerDoc::OnFrameWindowActivate

当激活或停用容器应用程序的框架窗口时,框架将调用此函数。

virtual void OnFrameWindowActivate(BOOL bActivate);

参数

bActivate
指定是激活还是停用框架窗口。

备注

默认实现将取消框架窗口可能处于的任何帮助模式。 如果要在激活或停用框架窗口时执行特殊处理,则重写此函数。

有关详细信息,请参阅激活一文。

COleServerDoc::OnGetEmbeddedItem

当容器应用程序调用服务器应用程序以创建或编辑嵌入项时,由框架调用。

virtual COleServerItem* OnGetEmbeddedItem() = 0;

返回值

一个指针,指向表示整个文档的项;如果操作失败,则为 NULL。

备注

没有默认实现。 必须重写此函数以返回表示整个文档的项。 此返回值应该是 COleServerItem 派生类的对象。

COleServerDoc::OnReactivateAndUndo

当用户选择撤消对已就地激活、更改并随后停用的项所做的更改时,框架将调用此函数。

virtual BOOL OnReactivateAndUndo();

返回值

如果成功,则不为 0;否则为 0。

注解

默认实现除了返回 FALSE 表示失败之外,不执行任何操作。

如果应用程序支持撤消,请重写此函数。 通常,你将执行撤消操作,然后通过调用 ActivateInPlace 激活项。 如果容器应用程序是用 Microsoft 基础类库编写的,则调用 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。

注解

默认实现调用 COleServerDoc::NotifySavedCOleServerDoc::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 项表示为使用“文件”菜单中的 Print 命令打印的项。

备注

通常在用户更改服务器文档后调用此函数。 如果 OLE 项通过自动链接链接到文档,则会更新该项以反映更改。 在使用 Microsoft 基础类库编写的容器应用程序中,调用 COleClientItemOnChange 成员函数。

此函数为除发送项外的每个文档项调用 OnUpdate 成员函数,并传递 pHint、lHint 和 nDrawAspect。 可使用这些参数将对文档所做修改的相关信息传递给项。 可以使用 lHint 对信息进行编码,也可以定义一个 CObject 派生类来存储有关修改的信息并使用 pHint 传递该类的对象。 在 COleServerItem 派生类中重写 OnUpdate 成员函数以优化每个项的更新,具体取决于其呈现是否已更改。

另请参阅

MFC 示例 HIERSVR
COleLinkingDoc 类
层次结构图
COleDocument 类
COleLinkingDoc 类
COleTemplateServer 类