引言
ActiveX控件是微软公司提供的功能强大的程序设计和开发技术,是COM组件开发技术的重要组成部分。它是OLE的第三个版本,对原先OLE控件的最大扩展是增加了Internet功能,它不仅可以在支持OLE控件的容器中使用,更可以作为一个Internet控件,直接成为网页的一部分。另外,ActiveX控件作为一种可重用的组件,相当于一个封装好的代码模块,它是通过其方法、属性、事件来与应用程序进行通信的,此外,ActiveX控件是与开发语言无关的。用户在使用控件时不必考虑它是VC还是用VB等其它语言开发的,应用程序都是通过COM与控件进行通信的。可见,任何支持 ActiveX控件的软件平台上都可以使用ActiveX控件,它使得不同厂商所开发的控件可以真正地组装在一起,从而令软件的生产过程类似于硬件业的各个插件的装配过程一样,实现了软件的工业化,大大降低了软件的开发成本,极大地提高了软件的生产效率,实现了软件资源的共享。
ATL技术
1)ATL
ATL是ActiveX Template Library 的缩写,它是一套C++模板库。使用ATL能够快速地开发出高效、简洁的代码(Effective and Slim code),同时对COM组件的开发提供最大限度的代码自动生成以及可视化支持。从Microsoft Visual C++ 5.0版本开始,Microsoft把ATL集成到Visual C++开发环境中。目前,ATL已经成为Microsoft标准开发工具中的一个重要成员,日益受到C++开发人员的重视。
在ATL产生以前,开发COM组件的方法主要有两种:一是使用COM SDK直接开发COM组件,另一种方式是通过MFC提供的COM支持来实现。
直接使用COM SDK开发COM组件是最基本也是最灵活的方式。但是,这种开发方式的难度和工作量都很大,一方面,要求开发者对于COM的技术原理具有比较深入的了解,另一方面,直接使用COM SDK要求开发人员自己去实现COM应用的每一个细节,完成大量的重复性工作。
使用MFC提供的COM支持开发COM应用可以说在使用COM SDK基础上提高了自动化程度,缩短了开发时间。MFC采用面向对象的方式将COM的基本功能封装在若干MFC的C++类中,开发者通过继承这些类得到 COM支持功能。但使用MFC开发的COM组件,尤其是ActiveX控件的开发,会产生相当大的代码冗余,而且必须要依赖于MFC的运行时刻库才能正确地运行。
ATL技术是目前开发COM组件的一种比较理想的技术。ATL中所使用的基本技术包括COM技术、C++模板类技术(Template)以及C++多继承技术(Multi-Inheritance) .
2) ATL的基本使用
使用ATL开发一个COM应用基本可以分为以下几个步骤:
(1)创建一个新的ATL工程,并对工程的选项进行适当的配置。
(2)向新创建的工程添加新的ATL类,并对该类进行一些初始配置工作。
(3)根据COM应用的基本要求向新的ATL类加入新的接口定义,并实现相应的接口成员函数。
(4)编译连接工程,注册COM应用。
利用ATL技术创建ActiveX控件CircleCtl
1) 创建ATL项目
使用ATL COM AppWizard 创建ATL框架为该项目命名为Circle,按照向导提示向下做,采用默认设置,即Server Type类型为Dynamic Link Library(DLL)。
2) 向ATL项目添加ActiveX控件
首先从Insert菜单项中选择New ATL Object…调出 ATL Object Wizard对话框,然后左边Category列表选择Object,右边相应地选择Full Control,如图(1)所示。按Next继续,出现 ATL Object Wizard属性对话框,如图(2),在Names选项卡中,我们只需要在Short Name 编辑框输入CircleCtl即可,其它系统就会自动给定,也可以修改,我们这里保持系统给定状态;在Attributes 选项卡中,选择 Support ISupportErrorInfo 和 Support Connection Points 两个复选框,这两项分别支持出错信息和连接点;Miscellaneous选项卡保持默认设置;Stock Properties中我们把FillColor添加到支栏中,确定之后就把该控件加到项目中了。
3)为ActiveX控件添加自定义属性
现在来添加Circle控件的一个基本属性——Radius.
在Workspace Windows中Class View状态下,右击 ICircleCtl接口,选择Add Property,属性类型为short,名为Radius,参数为空。系统会自动生成get_Radius和put_Radius两个成员函数。在 CCircleCtl中添加m_radius变量,用来存储半径。在CCircleCtl的构造函数中将其初始化为50,并在get_Radius函数中添加*pVal=m_radius;在put_Radius函数中添加m_radius=newVal; FireViewChange();用来及时更新视图。对于Radius的属性,我们通过修改控件的绘制代码来使它起作用。
4) 修改ActiveX控件的绘制代码实现属性交换
首先,在CCircleCtl的构造函数中对绘制圆的填充色进行初始化,将它的初始值设为红色,即m_clrFillColor=RGB(255,0, 0)。
接下来,我们需要几个全局变量来保存控件区域的信息,在CircleCtl.h中添加如下变量:
static POINT CenterPt;
static long RectHt = 0;
static long RectWd = 0;
然后修改OnDraw函数,在该绘制函数中,使用 Windows API中标准的HDC、HPEN、HBRUSH以及SelectObject、Ellipse等结构和函数来实现绘制的。例如:
// 创建画笔和画刷并选中颜色画圆
hPen = (HPEN)GetStockObject(BLACK_PEN);
hOldPen = (HPEN)SelectObject(hdc, hPen);
hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
hOldBrush = (HBRUSH)SelectObject(hdc, hBrush);
hBrush = CreateSolidBrush(colFore);
SelectObject(hdc, hBrush);
Ellipse (hdc, (CenterPt.x - m_radius), (CenterPt.y - m_radius), (CenterPt.x +m_radius),(CenterPt.y+ m_radius));
5) 为ActiveX控件添加事件
现在将向ATL控件中添加Click和RClick事件。如果用户在矩形区内点击,则会激发相应事件。现在要向ICircleCtlEvents接口添加 Click方法,首先在“ClassView”中选中“ICircleCtlEvents”右击,选择Add Method,出现如下对话框,并按下图设置,最后点“OK”按钮就可以添加Click事件的实现方法。用同样的方法添加RClick事件,参数与 Click事件一致。接下来我们要为控件实现连接点接口IConnectionPoint和连接点容器接口 IConnectionPointContainer.编译好Circle.idl文件,生成对应的Circle.tlb,在“ClassView”中选中“CCircleCtl”,右击,在Popup菜单中选择“Implement Connection Point”命令,在弹出的对话框中选中“_ICircleCtlEvents”接口。在类中定义了以两个坐标为参数的Fire_Click和 Fire_RClick方法,调用这两个方法就可以在控件中激发响应的事件。
最后,添加激发事件的代码,我们分别在鼠标左键和右键按下的消息响应中进行处理,激发响应的事件,例如OnLButtonDown函数部分代码如下:
WORD xPos = LOWORD(lParam); //鼠标水平坐标
WORD yPos = HIWORD(lParam); // 鼠标垂直坐标
Fire_Click (xPos, yPos); //执行触发函数
至此,可以在ActiveX Control Test Container中测试该控件。
网页中使用ActiveX控件
在控件生成时,系统同时生成了一个CircleCtl.htm文件,在VC编辑环境下打开该文件,在和之间加上如下的VBScript:
<SCRIPT LANGUAGE="VBScript">
<!--
Sub CircleCtl_Click(x, y)
If CircleCtl.Radius <100 Then
CircleCtl.Radius = CircleCtl.Radius+1 ‘半径加1
Else
MsgBox(“Radius must be less than 100!”)
End If
End Sub
Sub CircleCtl_RClick(x, y)
If CircleCtl.Radius >=1 Then
CircleCtl.Radius = CircleCtl.Radius-1 ‘半径减1
Else
MsgBox(“Radius mustn’t be less than 0!”)
End If
End Sub
-->
</SCRIPT>
注意保存。然后在“我的电脑”中打开该htm文件,用鼠标单击圆,半径变大,右击圆半径变小。
结束语
本文介绍了基于ATL技术以及使用该技术实现了一个简单的圆的控件CircleCtl并且介绍了其在网页中的使用。ActiveX控件作为可重用的代码组件,不仅应用广泛,还可节约开发时间。它将大量的实现细节隐藏起来,以简明的接口与用户名交互,易于使用。对ActiveX技术的研究已经成为当今软件业的热点和潮流。
没有合适的资源?快使用搜索试试~ 我知道了~
控件开发技术资料 玩转mfc
共47个文件
h:6个
cpp:4个
obj:4个
需积分: 9 10 下载量 129 浏览量
2010-07-16
18:28:44
上传
评论
收藏 2.35MB RAR 举报
温馨提示
控件开发技术资料 用 ATL ActiveX 绘制任意平面函数的曲线 VC++中用ActiveX控件实现与单片机的串行通信 ActiveX控件开发
资源推荐
资源详情
资源评论
收起资源包目录
控件开发技术资料.rar (47个子文件)
控件开发技术资料
Script.dsw 632B
Script.opt 48KB
ActiveX作业.pdf 88KB
Script.ncb 57KB
FunMap
FunMap.dsp 13KB
Map.cpp 5KB
StdAfx.cpp 315B
FunMap.idl 2KB
FunMap.rc 4KB
ReleaseUMinDependency
MapPP.obj 3KB
FunMap.pch 7MB
Map.obj 14KB
vc60.idb 49KB
FunMap.dll 116KB
regsvr32.trg 22B
FunMap.lib 2KB
FunMap.res 6KB
StdAfx.obj 5KB
FunMap.exp 1024B
FunMap.obj 177KB
ReleaseMinSize
FunMap.dll 108KB
MapPP.rgs 459B
FunMapCP.h 1010B
FunMap.tlb 3KB
map.bmp 246B
FunMap_i.c 1KB
MapPP.cpp 197B
FunMapps.mk 442B
FunMap.cpp 2KB
FunMapps.def 248B
FunMap.def 220B
Map.htm 179B
StdAfx.h 950B
MapPP.h 3KB
Map.rgs 777B
Resource.h 949B
FunMap_p.c 27KB
FunMap.h 21KB
Map.h 8KB
dlldata.c 833B
FunMap.plg 3KB
MFC开发ActiveX控件全过程.doc 108KB
VC++中用ActiveX控件实现与单片机的串行通信.doc 44KB
ActiveX控件开发.zip 141KB
ActiveX控件开发.pdf 220KB
用 ATL ActiveX 绘制任意平面函数的曲线 .rar 67KB
ActiveX.txt 7KB
共 47 条
- 1
资源评论
zdzl520
- 粉丝: 3
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功