MFC ActiveX 控件

来源:互联网 发布:我知女人心小说杜漫宁 编辑:程序博客网 时间:2024/04/29 16:19

MFC ActiveX 控件

Visual Studio .NET 2003

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 控件之间的交互

有关优化 ActiveX 控件的某些最新信息,请参见 MFC ActiveX 控件:优化。

若要创建 MFC ActiveX 控件,请参见创建 ActiveX 控件项目。

有关更多信息,请参见:

  • ActiveX 控件容器
  • 活动文档
  • 使用 ActiveX 控件
  • 了解 ActiveX 控件
  • 升级已有 ActiveX 控件以用于 Internet
  • 为 MFC ActiveX 控件添加区分上下文的帮助
  • 示例

ActiveX 控件的基本组件

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

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

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

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

有窗口的控件与 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 控件的示例。有关这些示例的更多信息,请参见控件示例:基于 MFC 的 ActiveX 控件。

原创粉丝点击