一、创建
两种方式:
第一种:创建“MFC ActiveX 控件”工程(这种方式建立的ActiveX控件只能在windows操作系统下运行,还必须在windows操作系统下安装c++依赖库安装包,因为MFC是建立在微软的c++动态库的基础上的,若不安装相关库则需要设置为静态MFC Dll编译)
第二种:创建“ATL 项目”。由于使用ATL开发ActiveX控件需要了解com技术,对程序员的要求也较高,开发时间也较长。
本文采取方法1.
具体方式:
1.文档结构:
使用向导创建完工程可以看到自动生成了三个类,CMFCActiveXControl1App,CFIT_ActiveXControlCtrl和CFIT_ActiveXControlPropPage
还有对外接口定义文件MFCActiveXControl1.idl
可以打开上面三个类的头文件及cpp文件,发现它们都是派生类。
CMFCActiveXControl1App:cpp文件中定义了DllRegisterServer和DllUnregisterServer,可以发现ActiveX的注册和反组册都与该类有关。
CFIT_ActiveXControlCtrl:可以发现该头文件中声明了消息映射(让ActiveX控件程序可以接受系统发送的事件通知,如窗体创建和关闭事件),调度映射(让外部调用程序(包含ActiveX的容器)可以方便地访问ActiveX控件的属性和方法),事件映射(让ActiveX控件可以向外部调用程序(包含ActiveX的容器)发送事件通知)。也就是说对ActiveX控件的窗口操作都将在这个类中完成,包括ActiveX控件的创建,重绘,以及在此类中创建可视MFC窗体。
CFIT_ActiveXControlPropPage:显示ActiveX控件的属性页的
让我们来看看最重要的部分:对外接口定义文件MFCActiveXControl1.idl,代码如下:
这个文件可以分为四个部分来看:
1.1是TMFCActiveXControl1.Lib这个库信息
1.2第二部分是调度映射的接口信息,该接口信息包含了属性(如控件背景色)和对外方法
里面定义了一个方法AboutBox(),该方法就可以被外部程序调用,在该接口里定义的函数都是纯虚函数,这些函数的实现都是在MFCActiveXControl1中完成的,MFC通过底层的封装,让TMFCActiveXControl1类继承这个接口,实现函数。
1.4第四部分是类的信息,其中uuid就是ActiveX控件注册到注册表的classid,它是ActiveX注册后在系统内的唯一标识,WEB网页就是使用这个ID加载ActiveX控件的
2.实现封装
定义调度映射和事件映射方法,提供给外部调用者使用
二、调用
1.注册ActiveX控件
按照上面的步骤已经完成简单ActiveX控件(无窗体界面的控件)的编写,重新生成后会在Debug下生成一个MFCActiveXControl1.ocx的文件,使用windows的dos窗口可以注册这个ActiveX控件
步骤:
regsvr32 c:\.......\.ocx
反注册命令:regsvr32 c:\.......\.ocx -u
有两种情况会导致控件注册失败:
第一种:使用非Administrator用户登入系统会由于权限不足而无法注册com组件,这时候就必须使用Administrator用户登入操作系统
第二种:ActiveX控件所依赖的dll库被程序给占用,就会导致注册失败,解决办法是将正在运行的程序关闭就可以
2.测试ActiveX控件的方法
有三种方式:
第一种:使用html网页来测试
classid在控件成功注册后也可以通过注册表查找,位置在“HKET_CLASSES_ROOT”中
第二种:建立Mfc应用程序,类向导--》添加MFC ActiveX的类--》查找文件--》导入类
第三种:TstCon.exe
5126



被折叠的 条评论
为什么被折叠?



