MFC ActiveX的创建和调用

来源:互联网 发布:高校一卡通网络 编辑:程序博客网 时间:2024/05/21 15:50

一、创建

两种方式:

第一种:创建“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.3第三部分是事件映射的接口信息

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


0 0