COleDocument 类

支持可视编辑的 OLE 文档的基类。

语法

class COleDocument : public CDocument

成员

公共构造函数

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

公共方法

名称 描述
COleDocument::AddItem 将项添加到文档维护的项列表中。
COleDocument::ApplyPrintDevice 为文档中的所有客户端项设置打印目标设备。
COleDocument::EnableCompoundFile 使文档使用 OLE 结构化存储文件格式进行存储。
COleDocument::GetInPlaceActiveItem 返回当前处于就地活动状态的 OLE 项。
COleDocument::GetNextClientItem 获取用于循环访问的下一个客户端项。
COleDocument::GetNextItem 获取用于循环访问的下一个客户端项。
COleDocument::GetNextServerItem 获取用于循环访问的下一个服务器项。
COleDocument::GetPrimarySelectedItem 返回文档中的主要选定 OLE 项。
COleDocument::GetStartPosition 获取开始循环访问的初始位置。
COleDocument::HasBlankItems 检查文档中的空白项。
COleDocument::OnShowViews 在文档变为可见或不可见时调用。
COleDocument::RemoveItem 从文档维护的项列表中删除项。
COleDocument::UpdateModifiedFlag 如果已修改任何包含的 OLE 项,则将文档标记为已修改。

受保护方法

名称 描述
COleDocument::OnEditChangeIcon 处理“Change Icon”菜单命令中的事件。
COleDocument::OnEditConvert 处理嵌入或链接对象从一种类型到另一种类型的转换。
COleDocument::OnEditLinks 处理“编辑”菜单上的“Links”命令中的事件。
COleDocument::OnFileSendMail 发送附加了文档的邮件。
COleDocument::OnUpdateEditChangeIcon 由框架调用,以更新“编辑/更改图标”菜单选项的命令 UI。
COleDocument::OnUpdateEditLinksMenu 由框架调用以更新“编辑/链接”菜单选项的命令 UI。
COleDocument::OnUpdateObjectVerbMenu 由框架调用,以更新“编辑/ObjectName”菜单选项以及从“编辑/ObjectName”访问的“谓词”子菜单的命令 UI
COleDocument::OnUpdatePasteLinkMenu 由框架调用,以更新“粘贴特殊”菜单选项的命令 UI。
COleDocument::OnUpdatePasteMenu 由框架调用,以更新“粘贴”菜单选项的命令 UI。

备注

COleDocument 派生自 CDocument,让你的 OLE 应用程序可使用 Microsoft 基础类库提供的文档/视图体系结构。

COleDocument 将文档视为 CDocItem 对象的集合来处理 OLE 项。 容器和服务器应用程序都需要此类体系结构,因为其文档必须能够包含 OLE 项。 COleServerItemCOleClientItem 类(均派生自 CDocItem)管理应用程序和 OLE 项之间的交互。

如果要编写简单的容器应用程序,请从 COleDocument 中派生文档类。 如果要编写支持链接到其文档所包含的嵌入项目的容器应用程序,请从 COleLinkingDoc 派生文档类。 如果要编写服务器应用程序或组合容器/服务器,请从 COleServerDoc 派生文档类。 COleLinkingDocCOleServerDoc 派生自 COleDocument,因此这些类继承了 COleDocumentCDocument 中可用的所有服务。

若要使用 COleDocument,请从其中派生类,并添加功能来管理应用程序的非 OLE 数据以及嵌入项或链接项。 如果定义 CDocItem 派生类来存储应用程序的本机数据,则可以使用 COleDocument 定义的默认实现来存储 OLE 和非 OLE 数据。 还可以设计自己的数据结构,以便将非 OLE 数据与 OLE 项分开存储。 有关详细信息,请参阅容器:复合文件一文。

如果存在邮件支持 (MAPI),则 CDocument 支持通过邮件发送文档。 COleDocument 已更新 OnFileSendMail 以正确处理复合文档。 有关详细信息,请参阅文章 MAPIMFC 中的 MAPI 支持

继承层次结构

CObject

CCmdTarget

CDocument

COleDocument

要求

标头:afxole.h

COleDocument::AddItem

调用此函数以向文档添加项。

virtual void AddItem(CDocItem* pItem);

参数

pItem
指向要添加的文档项的指针。

备注

如果接受指向文档的指针的 COleClientItemCOleServerItem 构造函数调用此函数,则无需显式调用此函数。

COleDocument::ApplyPrintDevice

调用此函数以更改应用程序容器文档中所有嵌入 COleClientItem 项的打印目标设备。

BOOL ApplyPrintDevice(const DVTARGETDEVICE* ptd);
BOOL ApplyPrintDevice(const PRINTDLG* ppd);

参数

ptd
指向 DVTARGETDEVICE 数据结构的指针,其中包含有关新打印目标设备的信息。 可以为 NULL。

ppd
指向 PRINTDLG 数据结构的指针,其中包含有关新打印目标设备的信息。 可以为 NULL。

返回值

如果该函数成功,则为非零;否则为 0。

注解

此函数更新所有项的打印目标设备,但不刷新这些项的呈现缓存。 若要更新项的呈现缓存,请调用 COleClientItem::UpdateLink

此函数的参数包含 OLE 用于标识目标设备的信息。 PRINTDLG 结构包含 Windows 用于初始化常见打印对话框的信息。 用户关闭对话框后,Windows 将返回有关此结构中用户选择的信息。 CPrintDialog 对象的 m_pd 成员是一个 PRINTDLG 结构。

有关详细信息,请参阅 Windows SDK 中的 PRINTDLG 结构。

有关详细信息,请参阅 Windows SDK 中的 DVTARGETDEVICE 结构。

COleDocument::COleDocument

构造 COleDocument 对象。

COleDocument();

COleDocument::EnableCompoundFile

如果要使用复合文件格式存储文档,请调用此函数。

void EnableCompoundFile(BOOL bEnable = TRUE);

参数

bEnable
指定是启用或禁用复合文件支持。

备注

这也称为结构化存储。 通常从 COleDocument 派生类的构造函数调用此函数。 有关复合文件的详细信息,请参阅容器:复合文件一文。

如果不调用此成员函数,文档将以非结构化(“平面”)文件格式存储。

为文档启用或禁用复合文件支持后,文档生存期内不应更改设置。

COleDocument::GetInPlaceActiveItem

调用此函数以获取当前在框架窗口(包含由 pWnd 标识的视图)中就地激活的 OLE 项

virtual COleClientItem* GetInPlaceActiveItem(CWnd* pWnd);

参数

pWnd
指向显示容器文档的窗口的指针。

返回值

指向单个就地活动 OLE 项的指针;如果当前没有处于“就地活动”状态的 OLE 项,则为 NULL。

COleDocument::GetNextClientItem

重复调用此函数以访问文档中的每个客户端项。

COleClientItem* GetNextClientItem(POSITION& pos) const;

参数

pos
对先前调用 GetNextClientItem 所设置的 POSITION 值的引用;初始值由 GetStartPosition 成员函数返回。

返回值

指向文档中下一个客户端项的指针;如果没有其他客户端项,则为 NULL。

备注

每次调用后,都会设置文档中下一个项的 pos 的值,该项可能是也可能不是客户端项

示例

// pDoc points to a COleDocument object
POSITION pos = pDoc->GetStartPosition();
COleClientItem* pItem;
CString strType;
while ((pItem = pDoc->GetNextClientItem(pos)) != NULL)
{
   // Use pItem
   pItem->GetUserType(USERCLASSTYPE_FULL, strType);
   TRACE(strType);
}

COleDocument::GetNextItem

重复调用此函数以访问文档中的每个项。

virtual CDocItem* GetNextItem(POSITION& pos) const;

参数

pos
对先前调用 GetNextItem 所设置的 POSITION 值的引用;初始值由 GetStartPosition 成员函数返回。

返回值

指向位于指定位置的文档项的指针。

备注

每次调用后,pos 的值都会设置为文档中下一项的 POSITION 值。 如果检索到的元素是文档中的最后一个元素,则 pos 的新值为 NULL

示例

// pDoc points to a COleDocument object
POSITION pos = pDoc->GetStartPosition();
CDocItem* pItem;
CString strType;
while (pos != NULL)
{
   pItem = pDoc->GetNextItem(pos);
   // Use pItem
   if (pItem->IsKindOf(RUNTIME_CLASS(COleClientItem)))
   {
      ((COleClientItem*)pItem)->GetUserType(USERCLASSTYPE_FULL, strType);
      TRACE(strType);
   }
}

COleDocument::GetNextServerItem

重复调用此函数以访问文档中的每个服务器项。

COleServerItem* GetNextServerItem(POSITION& pos) const;

参数

pos
对先前调用 GetNextServerItem 所设置的 POSITION 值的引用;初始值由 GetStartPosition 成员函数返回。

返回值

指向文档中下一个服务器项的指针;如果没有其他服务器项,则为 NULL。

备注

每次调用后,都会设置文档中下一个项的 pos 的值,该项可能是也可能不是服务器项

示例

// pDoc points to a COleDocument object
POSITION pos = pDoc->GetStartPosition();
COleServerItem* pItem;
while ((pItem = pDoc->GetNextServerItem(pos)) != NULL)
{
   // Use pItem
}

COleDocument::GetPrimarySelectedItem

由框架调用,以检索指定视图中当前选定的 OLE 项。

virtual COleClientItem* GetPrimarySelectedItem(CView* pView);

参数

pView
指向显示文档的活动视图对象的指针。

返回值

指向单个选定 OLE 项的指针;如果未选择任何 OLE 项或选择了多个项,则为 NULL。

备注

默认实现在包含的 OLE 项列表中搜索单个选定项,并返回指向该项的指针。 如果未选择任何项或选择了多个项,该函数会返回 NULL。 必须替代视图类中的 CView::IsSelected 成员函数,此函数才起作用。 如果有自己方法来存储包含的 OLE 项,请替代此函数。

COleDocument::GetStartPosition

调用此函数以获取文档中第一个项的位置。

virtual POSITION GetStartPosition() const;

返回值

可用于开始循环访问文档项的 POSITION 值;如果文档没有项,则为 NULL。

备注

将返回的值传递给 GetNextItemGetNextClientItemGetNextServerItem

COleDocument::HasBlankItems

调用此函数以确定文档是否包含任何空白项。

BOOL HasBlankItems() const;

返回值

如果文档包含任何空白项,则为非零;否则为 0。

注解

空白项是一个矩形为空的项。

COleDocument::OnEditChangeIcon

显示“OLE 更改图标”对话框,并将表示当前所选 OLE 项的图标更改为用户在对话框中选择的图标。

afx_msg void OnEditChangeIcon();

注解

OnEditChangeIcon 创建并启动 COleChangeIconDialog 更改图标对话框。

COleDocument::OnEditConvert

显示“OLE 转换”对话框,并根据对话框中的用户选择转换或激活当前所选 OLE 项。

afx_msg void OnEditConvert();

备注

OnEditConvert 创建并启动 COleConvertDialog 转换对话框。

转换的示例是将 Microsoft Word 文档转换为 WordPad 文档。

显示“OLE 编辑/链接”对话框。

afx_msg void OnEditLinks();

备注

OnEditLinks 创建并启动一个 COleLinksDialog 链接对话框,支持用户更改链接对象。

COleDocument::OnFileSendMail

通过常驻邮件主机(如果有)发送包含文档作为附件的邮件。

afx_msg void OnFileSendMail();

备注

OnFileSendMail 调用 OnSaveDocument 以将无标题和修改过的文档序列化(保存)到临时文件中,然后通过电子邮件发送该文件。 如果文档未修改过,则不需要临时文件;将发送原件。 OnFileSendMail 将加载 MAPI32.DLL(如果尚未加载)。

与为 CDocument 实现 OnFileSendMail 不同,此函数会正确处理复合文件。

有关详细信息,请参阅文章 MAPI 主题MFC 中的 MAPI 支持

COleDocument::OnShowViews

文档可见性状态更改后,框架会调用此函数。

virtual void OnShowViews(BOOL bVisible);

参数

bVisible
指示文档可见还是不可见。

注解

此函数的默认版本不执行任何操作。 如果应用程序在文档可见性发生更改时必须执行任何特殊处理,请替代它。

COleDocument::OnUpdateEditChangeIcon

由框架调用,以更新“编辑”菜单上的“Change Icon”命令。

afx_msg void OnUpdateEditChangeIcon(CCmdUI* pCmdUI);

参数

pCmdUI
指向 CCmdUI 结构的指针,该结构表示生成更新命令的菜单。 更新处理程序通过 pCmdUI 调用 CCmdUI 结构的 Enable 成员函数来更新用户界面

备注

OnUpdateEditChangeIcon 根据文档中是否存在有效图标来更新命令的用户界面。 替代此函数以更改行为。

COleDocument::OnUpdateEditLinksMenu

由框架调用,以更新“编辑”菜单上的“Links”命令。

afx_msg void OnUpdateEditLinksMenu(CCmdUI* pCmdUI);

参数

pCmdUI
指向 CCmdUI 结构的指针,该结构表示生成更新命令的菜单。 更新处理程序通过 pCmdUI 调用 CCmdUI 结构的 Enable 成员函数来更新用户界面

注解

从文档中的第一个 OLE 项开始,OnUpdateEditLinksMenu 访问每个项,测试该项是否为链接,如果是链接,则启用“Links”命令。 替代此函数以更改行为。

COleDocument::OnUpdateObjectVerbMenu

由框架调用,以更新“编辑”菜单上的 ObjectName 命令以及从 ObjectName 命令访问的“谓词”子菜单,其中 ObjectName 是嵌入文档中的 OLE 对象的名称

afx_msg void OnUpdateObjectVerbMenu(CCmdUI* pCmdUI);

参数

pCmdUI
指向 CCmdUI 结构的指针,该结构表示生成更新命令的菜单。 更新处理程序通过 pCmdUI 调用 CCmdUI 结构的 Enable 成员函数来更新用户界面

备注

OnUpdateObjectVerbMenu 根据文档中是否存在有效对象来更新 ObjectName 命令的用户界面。 如果存在对象,则启用“编辑”菜单上的 ObjectName 命令。 选中此菜单命令后,“谓词”子菜单随即显示。 “谓词”子菜单包含可用于对象的所有谓词命令,例如“Edit”、“Properties”等。 替代此函数以更改行为。

COleDocument::OnUpdatePasteLinkMenu

由框架调用,以确定是否可从剪贴板粘贴链接的 OLE 项。

afx_msg void OnUpdatePasteLinkMenu(CCmdUI* pCmdUI);

参数

pCmdUI
指向 CCmdUI 结构的指针,该结构表示生成更新命令的菜单。 更新处理程序通过 pCmdUI 调用 CCmdUI 结构的 Enable 成员函数来更新用户界面

备注

“Paste Special”菜单命令是启用还是禁用,具体取决于是否可将项粘贴到文档中。

COleDocument::OnUpdatePasteMenu

由框架调用,以确定是否可从剪贴板粘贴嵌入的 OLE 项。

afx_msg void OnUpdatePasteMenu(CCmdUI* pCmdUI);

参数

pCmdUI
指向 CCmdUI 结构的指针,该结构表示生成更新命令的菜单。 更新处理程序通过 pCmdUI 调用 CCmdUI 结构的 Enable 成员函数来更新用户界面

备注

“Paste”菜单命令和按钮是启用还是禁用,具体取决于是否可将项粘贴到文档中。

COleDocument::RemoveItem

调用此函数以从文档中删除项。

virtual void RemoveItem(CDocItem* pItem);

参数

pItem
指向要删除的文档项的指针。

注解

通常无需显式调用此函数;该函数由 COleClientItemCOleServerItem 的析构函数调用。

COleDocument::UpdateModifiedFlag

如果已修改任何包含的 OLE 项,则调用此函数将文档标记为已修改。

virtual void UpdateModifiedFlag();

备注

这使框架可在关闭前提示用户保存文档,即使文档中的本机数据未进行修改。

另请参阅

MFC 示例容器
MFC 示例 MFCBIND
CDocument 类
层次结构图