MFC ActiveX 控件

ActiveX 控件是基于组件对象模型(COM)的可重用软件组件,支持各种 OLE 功能,并且可以自定义以满足许多软件需求。

重要

ActiveX 是一项不推荐用于新开发的旧技术。 有关详细信息,请参阅 ActiveX 控件

ActiveX 控件设计用于普通 ActiveX 控件容器和 Internet 上的万维网网页。 可以使用 MFC、此处所述或 活动模板库(ATL)创建 ActiveX 控件。

ActiveX 控件可以在自己的窗口中绘制自身、响应事件(如鼠标单击),并通过包含类似于自动化对象中的属性和方法的接口进行管理。

可以针对许多用途开发这些控件,例如数据库访问、数据监视或图形。 除了可移植性之外,ActiveX 控件还支持以前对 ActiveX 控件不可用的功能,例如与现有 OLE 容器的兼容性,以及将其菜单与 OLE 容器菜单集成的功能。 此外,ActiveX 控件完全支持自动化,它允许控件公开读/写属性和一组可由控件用户调用的方法。

可以创建无窗口 ActiveX 控件和控件,这些控件仅在窗口变为活动状态时创建一个窗口。 无窗口控件可加快应用程序的显示速度,并使其具有透明和非矩形控件。 还可以异步加载 ActiveX 控件属性。

ActiveX 控件作为进程内服务器(通常是小型对象)实现,可在任何 OLE 容器中使用。 请注意,ActiveX 控件的完整功能仅在设计为注意 ActiveX 控件的 OLE 容器中使用时才可用。 有关支持 ActiveX 控件的容器列表,请参阅 “将 ActiveX 控件移植到其他应用程序 ”。 此容器类型后称为“控件容器”,可以使用控件的属性和方法作 ActiveX 控件,并接收事件形式的 ActiveX 控件的通知。 下图演示了此交互。

ActiveX 控件容器和控制的交互。
ActiveX 控件容器与窗口化 ActiveX 控件之间的交互

有关优化 ActiveX 控件的一些最新信息,请参阅 MFC ActiveX 控件:优化

若要创建 MFC ActiveX 控件,请参阅 “创建 ActiveX 控件项目”。

有关详细信息,请参见:

ActiveX 控件的基本组件

ActiveX 控件使用多个编程元素与控件容器和用户高效交互。 这些类 是 COleControl 类、一组事件触发函数和调度映射。

你开发的每个 ActiveX 控件对象都从其 MFC 基类继承一组强大的功能。 COleControl 这些功能包括就地激活和自动化逻辑。 COleControl 可以为控件对象提供与 MFC 窗口对象相同的功能,以及触发事件的能力。 COleControl 还可以提供 无窗口控件,这些控件依赖于其容器来帮助提供窗口提供的一些功能(鼠标捕获、键盘焦点、滚动),但提供更快的显示速度。

由于控件类派生自 COleControl,因此它继承了在满足某些条件时向控件容器发送或“触发”消息(称为事件)的功能。 当控件中发生重要事件时,这些事件用于通知控件容器。 可以通过将参数附加到事件向控件容器发送有关事件的其他信息。 有关 ActiveX 控件事件的详细信息,请参阅 MFC ActiveX 控件:事件一文。

最后一个元素是调度映射,用于向控件用户公开一组函数(称为方法)和属性(调用属性)。 属性允许控件容器或控件用户以各种方式作控件。 用户可以更改控件的外观、更改控件的某些值或发出控件的请求,例如访问控件所维护的特定数据片段。 此接口由控件开发人员确定,并使用 类视图定义。 有关 ActiveX 控件方法和属性的详细信息,请参阅文章 MFC ActiveX 控件:方法和属性

控件与 Windows 和 ActiveX 控件容器之间的交互

在控件容器中使用控件时,它使用两种机制进行通信:它公开属性和方法,并触发事件。 下图演示了如何实现这两种机制。

ActiveX 控件与其容器通信。
ActiveX 控件容器与 ActiveX 控件之间的通信

上图还说明了控件如何处理其他 OLE 接口(除了自动化和事件)。

所有控件与容器的通信都由 COleControl该容器执行。 若要处理容器的某些请求, COleControl 将调用在控件类中实现的成员函数。 以这种方式处理所有方法和某些属性。 控件的类还可以通过调用成员函数 COleControl来启动与容器的通信。 以这种方式触发事件。

ActiveX 控件的活动和非活动状态

控件有两种基本状态:活动状态和非活动状态。 传统上,这些状态通过控件是否具有窗口来区分。 活动控件有一个窗口;未使用非活动控件。 随着无窗口激活的引入,这种区别不再是通用的,但仍适用于许多控件。

无窗口控件处于活动状态时,它会从其容器调用鼠标捕获、键盘焦点、滚动和其他窗口服务。 还可以 向非活动控件提供鼠标交互,以及创建 控件,这些控件等待激活以创建窗口

当具有窗口的控件变为活动状态时,它可以与控件容器、用户和 Windows 完全交互。 下图演示了 ActiveX 控件、控件容器和作系统之间的通信路径。

活动窗口 ActiveX 控件中的 Msg 处理。
窗口式 ActiveX 控件中的 Windows 消息处理(活动时)

序列化

序列化数据(有时称为持久性)的功能允许控件将其属性的值写入永久性存储。 然后,可以通过从存储中读取对象的状态来重新创建控件。

请注意,控件不负责获取对存储介质的访问权限。 相反,控件的容器负责为控件提供一个存储介质,以便在适当的时间使用。 有关序列化的详细信息,请参阅 MFC ActiveX 控件:序列化一文。 有关优化序列化的信息,请参阅优化 ActiveX 控件中的 持久性和初始化 :优化。

安装 ActiveX 控件类和工具

安装 Visual C++时,如果在安装程序中选择 ActiveX 控件(默认选中了 ActiveX 控件),则会自动安装 MFC ActiveX 控件类和零售和调试 ActiveX 控件运行时 DLL。

默认情况下,ActiveX 控件类和工具安装在 \Program Files\Microsoft Visual Studio .NET 下的以下子目录中:

  • \Common7\Tools

    包含测试容器文件(TstCon32.exe及其帮助文件)。

  • \Vc7\atlmfc\include

    包含使用 MFC 开发 ActiveX 控件所需的包含文件

  • \Vc7\atlmfc\src\mfc

    包含 MFC 中特定 ActiveX 控件类的源代码

  • \Vc7\atlmfc\lib

    包含使用 MFC 开发 ActiveX 控件所需的库

还有 MFC ActiveX 控件的示例。 有关这些示例的详细信息,请参阅 控件示例:MFC-Based ActiveX 控件

另请参阅

用户界面元素