实现 In-Place 激活

就地激活使用户能够与嵌入对象进行交互,而无需离开容器文档。 当用户激活对象时,由容器应用程序和服务器应用程序的菜单栏中的元素组成的 复合菜单栏 将取代容器的主菜单栏。 这样,用户就可以使用这两个应用程序中的命令和功能,包括活动对象的上下文相关帮助。 当用户开始处理文档的某些非对象部分时,将停用该对象,从而使容器文档的原始菜单替换复合菜单。

此功能最初按 就地编辑 的名称进行。 此名称已更改,因为编辑只是一种使用户能够与正在运行的对象进行交互的方式。 例如,可以收听声音剪辑,而不是进行编辑。 可以查看视频剪辑,而不是进行编辑。 在视频剪辑的情况下,就地激活特别 apt,因为它允许它们就地运行,而无需调用单独的窗口。 如果要查看视频,例如与容器文档中的相邻文本数据一起查看,这可能很重要。

对于容器和服务器应用程序,实施就地激活完全是可选的。 OLE 仍支持激活对象的模型会导致服务器应用程序打开一个单独的窗口。 链接对象始终在单独的窗口中打开,以强调它们驻留在单独的文档中。

就地激活从对象开始,以响应 IOleObject:D: 从其容器调用的 overb 调用。 此调用通常在响应用户双击对象或从容器应用程序的 "编辑" 菜单中选择命令 (谓词) 时出现。

当嵌入对象处于活动状态时,就地窗口将接收键盘和鼠标输入。 当用户从复合菜单栏中选择命令时,将命令和相关联的菜单消息发送到容器或对象应用程序,具体取决于所选的特定下拉菜单。 通过对象的标尺、工具栏或框架修饰的输入将直接跳到拥有这些窗口的嵌入对象。

就地激活的嵌入对象将保持活动状态,直到容器停用它以响应用户输入,或对象自愿使活动状态显示为活动状态。 用户可以通过在容器文档内单击但在对象的就地激活窗口之外单击来停用对象,或者只是单击另一对象即可。 如果用户单击容器的标题栏、滚动条或特别是菜单栏,则就地激活的对象将保持活动状态。

可以将就地激活-对象服务器作为进程内服务器 (DLL) 或本地服务器 (EXE) 实现。 在这两种情况下,复合菜单栏都包含从服务器和容器进程) 的项 (通常为下拉菜单。 对于进程内服务器,就地激活窗口只是容器的窗口层次结构中的另一个子窗口,通过容器应用程序的消息泵接收输入。

对于本地服务器,就地激活窗口属于嵌入对象的服务器应用程序进程,但其父窗口属于容器。 就地激活窗口的输入将显示在服务器的消息队列中,并由服务器的消息循环进行调度。 OLE 库负责查看菜单命令和消息是否已正确调度。

复合文档