COleLinkingDoc 类
支持链接到所包含的嵌入项的 OLE 容器文档的基类。
语法
class COleLinkingDoc : public COleDocument
成员
公共构造函数
名称 | 描述 |
---|---|
COleLinkingDoc::COleLinkingDoc | 构造 COleLinkingDoc 对象。 |
公共方法
名称 | 描述 |
---|---|
COleLinkingDoc::Register | 将文档注册到 OLE 系统 DLL。 |
COleLinkingDoc::Revoke | 撤销文档的注册。 |
受保护方法
名称 | 描述 |
---|---|
COleLinkingDoc::OnFindEmbeddedItem | 查找指定的嵌入项。 |
COleLinkingDoc::OnGetLinkedItem | 查找指定的链接项。 |
注解
支持链接到嵌入项的容器应用程序称为“链接容器”。OCLIENT 示例应用程序是链接容器的一个示例。
链接项的源是另一个文档中的嵌入项时,必须加载该包含文档才能编辑嵌入项。 因此,用户要编辑链接项的源时,另一个容器应用程序必须能够启动链接容器。 应用程序还必须使用 COleTemplateServer 类,以便在以编程方式启动时创建文档。
若要将容器设置为链接容器,请从 COleLinkingDoc
而不是 COleDocument 派生文档类。 与任何其他 OLE 容器一样,必须对类进行设计,以存储应用程序的本机数据以及嵌入的或链接的项。 此外,必须设计用于存储本机数据的数据结构。 如果为应用程序的本机数据定义 CDocItem
派生类,可以使用 COleDocument
定义的接口来存储本机数据以及 OLE 数据。
若要允许另一个容器以编程方式启动你的应用程序,请将 COleTemplateServer
对象声明为应用程序的 CWinApp
派生类的成员:
class COleContainerApp : public CWinApp
{
protected:
COleTemplateServer m_server;
// remainder of class declaration omitted
在 CWinApp
派生类的 InitInstance
成员函数中,创建文档模板并将 COleLinkingDoc
派生类指定为文档类:
// CMyLinkDoc is derived from COleLinkingDoc
CMultiDocTemplate* pDocTemplate = new CMultiDocTemplate(IDR_LINKDOCTYPE,
RUNTIME_CLASS(CMyLinkDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CMyLinkView));
if (!pDocTemplate)
return FALSE;
pDocTemplate->SetContainerInfo(IDR_OLECONTTYPE_CNTR_IP);
AddDocTemplate(pDocTemplate);
通过调用对象的 ConnectTemplate
成员函数将 COleTemplateServer
对象连接到文档模板,然后通过调用 COleTemplateServer::RegisterAll
向 OLE 系统注册所有类对象:
m_server.ConnectTemplate(clsid, pDocTemplate, FALSE);
COleTemplateServer::RegisterAll();
有关示例 CWinApp
派生类定义和 InitInstance
函数,请参阅 MFC 示例 OCLIENT 中的 OCLIENT.H 和 OCLIENT.CPP。
有关使用 COleLinkingDoc
的详细信息,请参阅文章容器:实现容器和容器:高级功能。
继承层次结构
COleLinkingDoc
要求
标头:afxole.h
COleLinkingDoc::COleLinkingDoc
在不与 OLE 系统 DLL 通信的情况下构造 COleLinkingDoc
对象。
COleLinkingDoc();
备注
必须调用 Register
成员函数来通知 OLE 文档已打开。
COleLinkingDoc::OnFindEmbeddedItem
由框架调用,以确定文档是否包含具有指定名称的嵌入 OLE 项。
virtual COleClientItem* OnFindEmbeddedItem(LPCTSTR lpszItemName);
参数
lpszItemName
指向所请求的嵌入 OLE 项的名称的指针。
返回值
指向指定项的指针;如果找不到该项,则为 NULL。
注解
默认实现在嵌入项列表中搜索具有指定名称的项(名称比较区分大小写)。 如果有自己的方法来存储或命名嵌入的 OLE 项,请重写此函数。
COleLinkingDoc::OnGetLinkedItem
由框架调用,检查文档是否包含具有指定名称的链接服务器项。
virtual COleServerItem* OnGetLinkedItem(LPCTSTR lpszItemName);
参数
lpszItemName
指向所请求的链接 OLE 项的名称的指针。
返回值
指向指定项的指针;如果找不到该项,则为 NULL。
注解
默认 COleLinkingDoc
实现始终返回 NULL。 在派生类 COleServerDoc
中重写此函数,以在 OLE 服务器项列表中搜索具有指定名称的链接项(名称比较区分大小写)。 如果已实现自己存储或检索链接服务器项的方法,请重写此函数。
COleLinkingDoc::Register
通知 OLE 系统 DLL 文档已打开。
BOOL Register(
COleObjectFactory* pFactory,
LPCTSTR lpszPathName);
参数
pFactory
指向 OLE 工厂对象的指针(可以为 NULL)。
lpszPathName
指向容器文档的完全限定的路径的指针。
返回值
如果文档已成功注册,则为非零;否则为 0。
备注
创建或打开命名文件时调用此函数,以将文档注册到 OLE 系统 DLL。 如果文档表示嵌入的项,则无需调用此函数。
如果在应用程序中使用 COleTemplateServer
,则 COleLinkingDoc
的 OnNewDocument
、OnOpenDocument
和 OnSaveDocument
实现会自动调用 Register
。
COleLinkingDoc::Revoke
通知 OLE 系统 DLL 文档不再打开。
void Revoke();
备注
调用此函数以撤销文档在 OLE 系统 DLL 中的注册。
应在关闭命名文件时调用此函数,但通常不需要直接调用它。 COleLinkingDoc
的 OnCloseDocument
、OnNewDocument
、OnOpenDocument
和 OnSaveDocument
实现会自动调用 Revoke
。