容器:高级功能

本文介绍将可选高级功能合并到现有容器应用程序中所需的步骤。 这些功能包括:

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

容器/服务器应用程序是充当容器和服务器的应用程序。 Microsoft Word for Windows 就是一个示例。 你可以在其他应用程序中嵌入 Word for Windows 文档,还可以在 Word for Windows 文档中嵌入项。 将容器应用程序修改为容器和完整服务器(不能创建组合容器/微型服务器应用程序)的过程类似于创建完整服务器的过程。

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

  • 应用程序向导创建的容器代码已初始化 OLE 子系统。 无需更改或添加支持的任何内容。

  • 无论文档类的基类 COleDocument在哪里,请将基类更改为 COleServerDoc

  • 重写 COleClientItem::CanActivate 以避免在服务器本身用于就地编辑时就地编辑项。

    例如,MFC OLE 示例 OCLIENT 嵌入了容器/服务器应用程序创建的项。 打开 OCLIENT 应用程序并就地编辑容器/服务器应用程序创建的项。 编辑应用程序的项时,决定嵌入 MFC OLE 示例 HIERSVR 创建的项。 为此,不能使用就地激活。 必须完全打开 HIERSVR 才能激活此项。 由于 Microsoft Foundation 类库不支持此 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 的成员函数中,执行以下作:

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

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

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

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

MFC OLE 示例 OCLIENT 实现此功能。 有关如何执行此作的示例,请参阅 InitInstanceOCLIENT 中的函数。此示例应用程序的 CPP 文件。

另请参阅

容器
服务器