首页 > C/C++开发工具专区 > VC技术 > MFC ActiveX 控件
2006
09-03

MFC ActiveX 控件

ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,它支持广泛的 OLE 功能并可自定义以满足多种软件的需要。ActiveX 控件旨在用于普通的 ActiveX 控件容器和 Internet 上的万维网页。您既可以用此处介绍的 MFC 也可以用活动模板库 (ATL)来创建 ActiveX 控件。


ActiveX 控件可以在自己的窗口中对自身进行描述,对事件(如单击鼠标)做出响应,并可以通过包括属性和方法的接口进行管理,这些属性和方法与自动化对象中的属性和方法相似。


可以为许多用途(如数据库访问、数据监视或图形绘制)开发这些控件。除可移植性外,ActiveX 控件还支持先前所不具备的功能,如与现有 OLE 容器的兼容性和将其菜单与 OLE 容器的菜单集成在一起的能力。另外,ActiveX 控件完全支持自动化,使控件得以公开读/写属性和一组可由控件用户调用的方法。


可以创建无窗口的 ActiveX 控件和只有在活动时才创建窗口的控件。无窗口控件可加速应用程序的显示并可包含透明控件和非矩形控件。也可以异步加载 ActiveX 控件的属性。


ActiveX 控件作为进程内服务器(通常是一个小型对象)实现,而进程内服务器可用于任何 OLE 容器。请注意,只有在识别 ActiveX 控件的 OLE 容器内使用时,ActiveX 控件的全部功能才可用。这种容器类型(以后称为“控件容器”)可以通过使用 ActiveX 控件的属性和方法来操作该控件,并可以从 ActiveX 控件接收事件形式的通知。下图演示了此交互。


ActiveX 控件容器与有窗口的 ActiveX 控件之间的交互



ActiveX 控件的基本组件


ActiveX 控件使用几个编程元素与控件容器和用户有效地进行交互。这些元素是 COleControl 类、一组事件引发函数和调度映射。


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


由于该控件类是从 COleControl 派生的,因此它继承了在满足某些条件时,向控件容器发送或“引发”消息(称为事件)的能力。这些事件用于在控件中发生重要的事情时通知控件容器。通过向事件附加参数,可将关于事件的其他信息发送到控件容器。


最后的元素是调度映射,它用于向控件用户公开一组函数(称为方法)和特性(称为属性)。属性使控件容器或控件用户得以以各种方式操作控件。用户可以更改控件的外观、更改控件的某些值或生成控件请求(如访问控件所维护的特定数据片段)。该接口由控件开发人员确定并通过“类视图”定义。有窗口的控件与 ActiveX 控件容器之间的交互


当在控件容器内使用控件时,该控件使用两种机制进行通信:一种是公开属性和方法,一种是引发事件。下图演示了这两种机制的实现方式。


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



上图还阐释了控件如何处理除自动化和事件之外的其他 OLE 接口。


控件与容器进行的所有通信都由 COleControl 执行。为处理容器的某些请求,COleControl 调用在控件类中实现的成员函数。所有方法和部分属性都是以此方式处理的。控件类也可以通过调用 COleControl 的成员函数来初始化与容器的通信。事件是以此方式引发的。


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


控件有两种基本状态:活动和非活动。传统上,根据控件是否有窗口来区分这两种状态。活动控件有窗口,而非活动控件没有窗口。引入了无窗口激活后,这种区别不再通用,但仍适用于许多控件。


当无窗口控件处于活动状态时,它从其容器调用鼠标捕获、键盘焦点、滚动和其他窗口服务。除了可以创建等待直到被激活以创建窗口的控件外,还可以为非活动控件提供鼠标交互。


当有窗口的控件处于活动状态时,它能够与控件容器、用户和 Windows 进行完全交互。下图演示了 ActiveX 控件、控件容器和操作系统之间的通信路径。


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



序列化


序列化数据的能力(有时称为持久性)使控件得以将其属性值写入持久性存储。这样就可以通过从存储读取对象状态来重新创建控件。


请注意,控件并不负责获取对存储媒体的访问。相反,控件的容器负责为控件提供存储媒体以便在适当的时候使用。有关序列化的更多信息,请参见文章 MFC ActiveX 控件:序列化。有关优化序列化的信息,请参见“ActiveX 控件:优化”中的优化持久性和初始化。


安装 ActiveX 控件类和工具


安装 Visual C++ 时,如果在安装过程中选择了 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 控件的示例。



  


留下一个回复