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 项。 COleServerItem 和 COleClientItem 类(均派生自 CDocItem
)管理应用程序和 OLE 项之间的交互。
如果要编写简单的容器应用程序,请从 COleDocument
中派生文档类。 如果要编写支持链接到其文档所包含的嵌入项目的容器应用程序,请从 COleLinkingDoc 派生文档类。 如果要编写服务器应用程序或组合容器/服务器,请从 COleServerDoc 派生文档类。 COleLinkingDoc
和 COleServerDoc
派生自 COleDocument
,因此这些类继承了 COleDocument
和 CDocument
中可用的所有服务。
若要使用 COleDocument
,请从其中派生类,并添加功能来管理应用程序的非 OLE 数据以及嵌入项或链接项。 如果定义 CDocItem
派生类来存储应用程序的本机数据,则可以使用 COleDocument
定义的默认实现来存储 OLE 和非 OLE 数据。 还可以设计自己的数据结构,以便将非 OLE 数据与 OLE 项分开存储。 有关详细信息,请参阅容器:复合文件一文。
如果存在邮件支持 (MAPI),则 CDocument
支持通过邮件发送文档。 COleDocument
已更新 OnFileSendMail 以正确处理复合文档。 有关详细信息,请参阅文章 MAPI 和 MFC 中的 MAPI 支持。
继承层次结构
COleDocument
要求
标头:afxole.h
COleDocument::AddItem
调用此函数以向文档添加项。
virtual void AddItem(CDocItem* pItem);
参数
pItem
指向要添加的文档项的指针。
备注
如果接受指向文档的指针的 COleClientItem
或 COleServerItem
构造函数调用此函数,则无需显式调用此函数。
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。
备注
将返回的值传递给 GetNextItem
、GetNextClientItem
或 GetNextServerItem
。
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 文档。
COleDocument::OnEditLinks
显示“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
指向要删除的文档项的指针。
注解
通常无需显式调用此函数;该函数由 COleClientItem
和 COleServerItem
的析构函数调用。
COleDocument::UpdateModifiedFlag
如果已修改任何包含的 OLE 项,则调用此函数将文档标记为已修改。
virtual void UpdateModifiedFlag();
备注
这使框架可在关闭前提示用户保存文档,即使文档中的本机数据未进行修改。