第 4章 ActiveX控件
ActiveX控件基础
ActiveX控件发展历史
ActiveX控件的属性
ActiveX控件的事件
ActiveX控件的方法
使用 ActiveX控件的一般方法
日历控件的实现实例使用 ActiveX控件与使用标准 Windows控件非常类似,标准控件作为操作系统的一部分,可在程序中直接使用,而 ActiveX
控件需要事先安装到项目中,使用时,可通过属性对话框设置控件的属性、分配资源标识符,关联成员变量,映射控件事件
安装控件并添加到项目中
映射控件事件
1,VBX作为 VB的扩展,作为可重用的软件组件,可直接嵌入应用程序中,MFC2.0开始支持
2,VBX为 16位,Win32中,推出 OLE2.0,发展 OLE控件,称为 OCX
3,随着网络的发展,对 OCX改进,使其更适合网络传播,将其与 OCX
一起称为 ActiveX控件
4,ActiveX控件的特点
ActiveX控件是直接插入程序中的软件模块,基于 COM技术
ActiveX控件的资源非常丰富,可通过网络或软件开发商获得,
也可自己开发 ActiveX控件,使用也非常方便:
将 ActiveX控件拖放到资源模板的适当位置,设置它的资源标识符和属性,关联成员变量,映射控件事件(使用控件时,需要将控件与控件类关联)
ActiveX控件的历史
ActiveX控件的属性
1,属性:控件的特征或特性,具有符号化名称,在控件内部通过整数索引对应,类似类中的成员变量
2,公共属性和自定义属性
控件类的基类为 COleControl,公共属性由该类定义
自定义属性由控件开发者定义,在控件类提供相应成员函数访问这些属性
3,访问控件的属性
在程序设计阶段,可通过属性对话框访问控件的属性,在程序运行阶段,可通过调用相应的方法访问控件属性,对于公共属性,访问的方法由 COleControl类提供,对于自定义属性,这些方法由控件开发者提供
注意:程序运行阶段,只能设置非只读属性
ActiveX控件的事件
1,用户操作控件(如鼠标单击、输入数据等),控件将激发事件并将事件通知控件容器,控件类将调用相应的事件处理函数
2,可以通过 ClassWizard映射控件事件,类似于消息映射,将事件处理函数和事件关联起来,当控件容器收到事件通知时,将调用控件类的这一事件处理函数
3,公共事件和自定义事件
共有事件由 COleControl类定义并进行映射,可以使用共用事件的默认处理函数,也可以在控件类中重载它们
自定义事件由控件开发者定义
4,要点,ActiveX控件、控件容器、控件类、控件事件映射的概念及联系
ActiveX控件的方法
1,ActiveX控件与应用程序的交换
用户操作控件 → 控件激发事件并通知控件容器 → 控件容器收到事件通知 → 控件类调用控件事件处理函数
控件容器通过调用控件方法,间接操作控件
控件的方法是应用程序向控件发送数据的接口,与控件类的成员函数相关联,通过调用控件的成员函数,即可间接调用控件内部的方法
2,公有方法与自定义方法
公有方法由 COleControl类提供
自定义方法由控件开发者提供使用 ActiveX控件的一般方法
1,生成支持 ActiveX控件的控件容器程序
2,搜索需要的控件(通常保存在扩展名为 OCX的动态链接库文件中),并将控件登记到注册表中
3,将注册的控件添加到创建的项目中
4,与普通控件的使用类似,将控件添加到控件容器中,并设置控件的属性、资源标识符、关联成员变量
5,使用 ClassWizard映射控件事件,编写控制函数
6,注册控件时,可使用 Windows\System\Regsvr32.exe工具注册,Regsvr32 控件文件名,OCX
反注册,Regsvr32/u 控件文件名,OCX
安装控件
1,生成支持 ActiveX控件的应用程序
在 AppWizard向导的第二步,选中 ActiveX Controls选项
要点:此时 AppWizard所生成的项目只是比普通项目多添加两行代码,一是位于应用程序类的 InitInstance 开始处的
AfxEnableControlContainer();在项目的头文件 stdAfx.h中包含 afxdisp.h头文件。在不支持 ActiveX控件的项目相应地方添加这两行代码,亦可使之支持 ActiveX控件。
2,安装日历控件
Microsoft Monthview Control位于 System\Mscomce2.ocx文件中,通常随着 Office或 Visual Studio 6.0的安装将安装并注册到系统中,若没有安装,可借助 Regsvr32来完成
添加该控件项目中,生成相应的控件类
设置属性、配置 ID、关联成员变量控件类 CMonthView解析
1,GetXXX,SetXXX成员函数对,用来获取、设置控件属性,成员函数与控件内部的方法调用存在映射关系,调用成员函数最终将映射到调用控件的方法
2,映射控件事件
与消息映射类似,用户操作控件将激发事件,控件将事件通知控件容器,容器接收到事件后,将调用控件类的事件映射函数
要点:公有事件在控件类的基类 COleControl中有默认的事件映射函数,可以在控件类中重载它;对于自定义事件,需要在控件类中使用 ClassWizard进行事件映射
3,实例:映射日历控件的 SelChange事件