容器:高级功能

本文描述所需步骤中合并选项高级功能到现有的容器应用程序中。 这些特性包括:

  • 应用程序既是容器也是服务器

  • OLE 链接到一个潜入的对象

创建一个容器/服务器应用程序

服务器/容器应用程序行为既是容器也是服务器。 对于Windows,Microsoft Word 是此一个示例。 您可以将Word for Windows文档嵌入到其他应用程序,也可以在 Word for Windows 文档中嵌入条目。 修改容器应用程序进程既是容器也是完整服务器 (不能创建容器 /miniserver组合应用程序) 类似于创建完全服务器进程。

文章 服务器:实现服务器 列出很多所需的任务实现服务器应用程序。 如果将容器应用程序转换到容器/服务器应用程序,则需要执行一些相同任务,添加代码到该容器。 下面列出了重要考虑的事情:

  • 由应用程序向导创建的已经初始化 OLE 子系统的容器代码。 不需要为该支持更改或添加任意东西。

  • 无论何时文本类的基类是 COleDocument,将基类更改为 COleServerDoc

  • 当服务器用于适当编辑时,请重写 COleClientItem::CanActivate 以避免适当编辑条目。

    例如,MFC OLE 示例 OCLIENT 已经嵌入由容器/服务器应用程序创建的条目中。 您打开 OCLIENT 应用程序,适当编辑由容器/服务器应用程序创建的项目。 当编辑应用程序的项时,决定要嵌入由 MFC OLE 示例 HIERSVR 创建的项。 为此,不能使用就地激活。 必须完全打开 HIERSVR 来激活此项。 因为 Microsoft 基础类库不支持 OLE 功能,重写 COleClientItem::CanActivate 可以检查此情况并阻止应用程序的运行时错误。

如果创建新应用程序并想让它作为容器/服务器应用程序函数,选择在应用程序向导 OLE 选项对话框中的选项并且此支持将自动创建。 有关详细信息,请参阅文章 概述:创建 ActiveX 控件容器。 有关 MFC 示例的信息,请参阅 MFC 示例。

注意不能将 MDI 应用程序插入到其本身。 容器是/服务器的应用程序不能插入到其本身,除非它是 SDI 应用程序。

链接到嵌入的对象

该链接嵌入对象功能使用户能够创建OLE链接到你的容器应用程序中嵌入对象的文档。 例如,在文字处理程序中创建包含嵌入的电子表格的文档。 如果应用程序支持连接到嵌入的对象,则可粘贴链接到在文字处理器的文档包含的电子表格。 此功能允许应用程序使用在电子表格包含的信息,而不必知道问字处理器最初何处获得它。

链接到应用程序中的嵌入对象

  1. COleLinkingDoc 而不是 COleDocument 派生文档类。

  2. 通过使用包含 OLE 开发工具类 ID 生成器,为应用程序创建 OLE 类 ID (CLSID) 。

  3. 用 OLE 注册应用程序。

  4. 创建一个 COleTemplateServer 对象作为应用程序类的成员。

  5. 在应用程序类的 InitInstance 成员函数中,执行以下操作:

    • 通过调用对象的 ConnectTemplate 成员函数连接 COleTemplateServer 对象到文档模板。

    • 调用 COleTemplateServer::RegisterAll 成员函数来注册与 OLE 系统的所有类的对象。

    • 调用 COleTemplateServer::UpdateRegistry。 如果应用程序未启动使用“/Embedded”开关, UpdateRegistry 的唯一参数应该为 OAT_CONTAINER。 这将作为可支持连接到嵌入对象的容器注册应用程序。

      如果启动应用程序“”开关 /Embedded,则不应显示其主窗口,与服务器应用类似。

MFC OLE 示例 OCLIENT 实现此功能。 有关如何实现此方法的示例,请参阅本示例应用程序 OCLIENT.CPP 文件中的 InitInstance 函数。

请参见

概念

容器

服务器