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 的详细信息,请参阅文章容器:实现容器容器:高级功能

继承层次结构

CObject

CCmdTarget

CDocument

COleDocument

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,则 COleLinkingDocOnNewDocumentOnOpenDocumentOnSaveDocument 实现会自动调用 Register

COleLinkingDoc::Revoke

通知 OLE 系统 DLL 文档不再打开。

void Revoke();

备注

调用此函数以撤销文档在 OLE 系统 DLL 中的注册。

应在关闭命名文件时调用此函数,但通常不需要直接调用它。 COleLinkingDocOnCloseDocumentOnNewDocumentOnOpenDocumentOnSaveDocument 实现会自动调用 Revoke

另请参阅

MFC 示例 OCLIENT
COleDocument 类
层次结构图
CDocTemplate 类