c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目

1.ActiveX的基本概念

ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体等。。。

ActiveX控件的后缀名是OCX或者DLL。一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或exe解压成OCX和动态库共存的文件,然后注册ocx文件。

ActiveX控件是基于com标准,使得软件部件在网络环境中进行交互的技术集。它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术也被用于方便地创建普通的桌面应用程序,此外ActiveX一般具有界面。

2.三个概念:ActiveX、OLE和COM

从时间的角度讲,OLE是最早出现的,然后是COM和 ActiveX;从体系结构角度讲,OLE和ActiveX是建立在COM之上的,所以COM是基础;单从名称角度讲,OLE、ActiveX是两个商标名称,而COM则是一个纯技术名词,这也是大家更多的听说ActiveX和OLE的原因。COM是应OLE的需求而诞生的,所以虽然COM是OLE的基础,但OLE的产生却在COM之前。COM的基本出发点是,让某个软件通过一个通用的机构为另一个软件提供服务。ActiveX最核心的技术还是COM。ActiveX和OLE的最大不同在于,OLE针对的是桌面上应用软件和文件之间的集成,而 ActiveX则以提供进一步的网络应用与用户交互为主。COM对象可以用C++、Java和VB等任意一种语言编写,并可以用DLL或作为不同过程工作的执行文件的形式来实现。使用COM对象的浏览器,无需关心对象是用什么语言写的,也无须关心它是以DLL还是以另外的过程来执行的。从浏览器端看,无任何区别。这样一个通用的处理技巧非常有用。

3.ActiveX控件工程的创建

使用VS2010有两种方式可以创建ActiveX工程,

第一种:创建“MFC ActiveX 控件”工程;

第二种:创建“ATL 项目”。由于使用ATL开发ActiveX控件需要了解com技术,对程序员的要求也较高,开发时间也较长,所以如果ActiveX只在windows操作系统下运行,那么就使用“MFC ActiveX 控件”工程来快速建立ActiveX控件。但是这里要注意了:使用“MFC ActiveX 控件”工程来快速建立ActiveX控件,他不仅要建立在windows操作系统下,还必须在windows操作系统下安装c++依赖库安装包,因为MFC是建立在微软的c++动态库的基础上的。所以这两种方式各有优缺点,根据项目需求来选择适合的方式。

4.使用VS2010创建MFC ActiveX工程项目步骤

由于使用ATL进行ActiveX工程的创建难度比较大,所以这里先使用“MFC ActiveX 控件”工程来创建一个简单的ActiveX控件。

第一:新建项目-》选择“MFC ActiveX 控件”工程,给项目命名TestMfcAtlDebug,点击确定,弹出“控件向导”对话框

第二:在概述,应用程序设置,控件名称和控件设置都可以选择默认,然后点击“完成”,这样“MFC ActiveX 控件”工程创建完成

5.分析“MFC ActiveX 控件”工程的三个重要的类以及对外接口定义文件idl

使用向导创建完工程可以看到自动生成了三个类,TestMfcAtlDebug,TestMfcAtlDebugCtrl和TestMfcAtlDebugPropPage

可以打开上面三个类的头文件及cpp文件,发现它们都是派生类。

TestMfcAtlDebug:cpp文件中定义了DllRegisterServer和DllUnregisterServer,可以发现ActiveX的注册和反组册都与该类有关。

TestMfcAtlDebugCtrl:可以发现该头文件中声明了消息映射(让ActiveX控件程序可以接受系统发送的事件通知,如窗体创建和关闭事件),调度映射(让外部调用程序(包含ActiveX的容器)可以方便地访问ActiveX控件的属性和方法),事件映射(让ActiveX控件可以向外部调用程序(包含ActiveX的容器)发送事件通知)。也就是说对ActiveX控件的窗口操作都将在这个类中完成,包括ActiveX控件的创建,重绘,以及在此类中创建可视MFC窗体。

TestMfcAtlDebugPropPage:显示ActiveX控件的属性页的

让我们来看看最重要的部分:对外接口定义文件TestMfcAtlDebug.idl,代码如下:

#include <olectl.h>#include <idispids.h>[ uuid(69EE37F4-8B36-495F-9F60-5E3AAF2FB494), version(1.0), control ]library TestMfcAtlDebugLib{importlib(STDOLE_TLB);// CTestMfcAtlDebugCtrl 的主调度接口[uuid(6B60346D-5CCD-4907-83F4-51938558A9B7)]dispinterface _DTestMfcAtlDebug{properties:methods:[id(DISPID_ABOUTBOX)] void AboutBox();};// CTestMfcAtlDebugCtrl 的事件调度接口[uuid(E26ECC46-9BA2-4C25-A4DD-A690560A5113)]dispinterface _DTestMfcAtlDebugEvents{properties:// 事件接口没有任何属性methods:};// CTestMfcAtlDebugCtrl 的类信息[uuid(DD0CF7EF-A181-428C-B5FC-C44A1C13CA43)]coclass TestMfcAtlDebug{[default] dispinterface _DTestMfcAtlDebug;[default, source] dispinterface _DTestMfcAtlDebugEvents;};};

这个就是对外接口定义文件,如果外部程序想要调用ActiveX的方法,属性以及在注册表注册的classid(WEB网页调用需要使用),就必须了解这个文件,这个文件可以分为四个部分来看:

首先是TestMfcAtlDebug.Lib这个库信息

这个就不做详解

第二部分是调度映射的接口信息,该接口信息包含了属性(如控件背景色)和对外方法

一个人去旅行,而且是去故乡的山水间徜徉。

c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目

相关文章:

你感兴趣的文章:

标签云: