本文介绍可用于优化 ActiveX 控件以提高性能的技术。
重要
ActiveX 是一项不推荐用于新开发的旧技术。 有关取代 ActiveX 的新式技术的详细信息,请参阅 ActiveX 控件。
主题 关闭“在可见时激活时激活”选项 并提供 鼠标交互,而非活动 状态讨论在激活之前未创建窗口的控件。 提供无窗口激活的主题讨论永远不会创建窗口的控件,即使它们已激活也是如此。
Windows 对 OLE 对象有两个主要缺点:它们阻止对象在活动时透明或非矩形,并且会为控件的实例化和显示增加很大的开销。 通常,创建窗口需要 60% 的控件创建时间。 使用单个共享窗口(通常为容器)和一些调度代码,控件接收相同的窗口服务,通常不会丢失性能。 对于对象来说,窗口的开销大多是不必要的。
某些优化不一定在某些容器中使用控件时提高性能。 例如,在 1996 年之前发布的容器不支持无窗口激活,因此实现此功能不会在较旧的容器中带来好处。 但是,几乎每个容器都支持持久性,因此优化控件的持久性代码可能会提高其在任何容器中的性能。 如果控件专门用于一种特定类型的容器,则可能需要研究该容器支持哪些优化。 但是,一般情况下,应尝试实现适用于特定控件的许多技术,以确保控件在各种容器中也能执行这些技术。
可以在“控件设置”页上通过 MFC ActiveX 控件向导实现其中许多优化。
MFC ActiveX 控件向导 OLE 优化选项
MFC ActiveX 控件向导中的控件设置 | 行动 | 详细信息 |
---|---|---|
当可见复选框时激活 | 清晰 | 关闭“当可见时激活”选项 |
无窗口激活 复选框 | 选择 | 提供无窗口激活 |
“未捕获的设备上下文 ”复选框 | 选择 | 使用未修复的设备上下文 |
“无闪烁激活 ”复选框 | 选择 | 提供 Flicker-Free 激活 |
处于非活动状态时鼠标指针通知 复选框 | 选择 | 在非活动状态时提供鼠标交互 |
“优化绘图代码 ”复选框 | 选择 | 优化控件绘图 |
有关实现这些优化的成员函数的详细信息,请参阅 COleControl。
有关详细信息,请参见: