前言 ActiveX 控件是一种实现了一系列特定接口而使其在使用和外观上更象一个控件的COM组件。ActiveX 控件这种技术涉及到了几乎所有的COM 和OLE 的技术精华,如可链接对象、统一数据传输、OLE 文档、属性页、永久存储以及OLE 自动化等。 ActiveX 控件作为基本的界面单元,必须拥有自己的属性和方法以适合不同特点的程序和向包容器程序提供功能服务,其属性和方法均由自动化服务的IDispatch 接口来支持。除了属性和方法外,ActiveX 控件还具有区别于自动化服务的一种特性--事件。事件指的是从控件发送给其包容程序的一种通知。与窗口控件通过发送消息通知其拥有者类似,ActiveX 控件是通过触发事件来通知其包容器的。事件的触发通常是通过控件包容器提供的IDispatch 接口来调用自动化对象的方法来实现的。在设计 ActiveX 控件时就应当考虑控件可能会发生哪些事件以及包容器程序将会对其中的哪些事件感兴趣并将这些事件包含进来。与自动化服务不同,ActiveX 控件的方法、属性和事件均有自定义(custom)和库存(stock)两种不同的类型。自定义的方法和属性也就是是普通的自动化方法和属性,自定义事件则是自己选取名字和Dispatch ID 的事件。而所谓的库存方法、属性和事件则是使用了ActiveX 控件规定了名字和Dispatch ID 的"标准"方法、属性和事件。 ActiveX 控件可以使COM 组件从外观和使用上能与普通的窗口控件一样,而且还提供了类似于设置 Windows 标准控件属性的属性页,使其能够在包容器程序的设计阶段对ActiveX 控件的属性进行可视化设置。ActiveX 控件提供的这些功能使得对其的使用将是非常方便的。本文下面即以 MFC 为工具对ActiveX 控件的开发进行介绍。 建立工程框架 通过"MFC ActiveX ControlWizard"向导可以非常容易的建立一个MFC ActiveX 控件工程框架。按照默认的选项将建立如图 1 所示的工程结构: 图 1 使用缺省选项建立的ActiveX 控件工程结构 其中,_DSample68 和_DSample68Events 这两个接口将为客户程序提供本控件的属性、方法以及可能响应的事件。全局函数 DllRegisterServer()和DllUnregisterServer()分别用于控件在注册表的注册和注销,一般不需要对其进行改动。 应用程序类从 COleControlModule 继承。而COleControlModule 有是从 CWinApp 派生,提供了初始化控件模块的功能。CSample68PropPage 的基类是COlePropertyPage,CDialog 类的派生类,主要负责对属性...