Web应用中的ActiveX控件的创建与使用

2015-03-15 05:33邢素萍
微型电脑应用 2015年12期
关键词:属性控件对话框

邢素萍



Web应用中的ActiveX控件的创建与使用

邢素萍

摘要:介绍了微软公司提出的广泛应用于桌面及Web应用中的ActiveX工具集合的创建与使用。ActiveX控件是基于组件对象模型(COM)的可重用软件组件,有了它在网页和桌面应用程序中加入特殊的功能会很方便。使用VS2010创建了一个ActiveX控件包含为控件添加属性;改写相关函数;添加事件功能与添加事件激发功能等方法。使用ActiveX控件可丰富编程语言功能,拓宽Web程序的应用领域。

关键词:控件、Web页、属性、对话框

0 引言

ActiveX是微软公司提出的一套二进制组件发布方案、实现规范和工具集合的总称。目的是实现软件二进制级别的兼容和复用,解决了软件技术发展的早期,各种不同语言及不同编译器创建的软件在二进制级别不能互访的问题。ActiveX控件与自动化编程语言间存在非常密切的联系,其主要的目标之一就是丰富编程语言功能。ActiveX 控件是基于组件对象模型(COM)的可重用软件组件,广泛应用于桌面及Web应用中。

1 创建ActiveX控件

ActiveX控件可以由任何语言实现,最后生成的组件要遵循ActiveX技术规范,比如可以使用Visual Basic、C++、C等语言,微软公司的Visual Studio系列开发套件可以较好的支持ActiveX。新版的ATL(活动模板库)为COM组件的开发带来了简便方法,我们下面使用Visual Studio 2010团队开发版(下文简称VS2010)创建一个最简单的ActiveX,实现消息轮播的功能。建立ActiveX项目最常用的方式是使用VS2010项目向导生成COM组件的框架。使用向导可以大大简化开发工作,新建一个ALT项目的操作步骤如下:

第1步:在VS2010主界面窗口中,选择菜单栏“新建”|“项目”命令,打开“新建项目”对话框,如图1所示:

图1 新建项目

第2步:在“已安装的模板”列表框中单击“其他语言”|“Visual C++”|“ATL”项目。选择右侧的“ATL项目”,在“名称”编辑框中输入项目名称“MessageBoard”,在“位置”编辑框中输入项目保存的路径。单击“确定”按钮,打开“ATL项目向导”对话框。

第3步:单击“应用程序设置”标签,勾选“允许合并代理/存根(stub)代码”复选框,如图2所示:

图2 ALT项目向导

单击“完成”按钮完成项目的创建。

2 添加ATL控件

接下来为COM对象添加一个ATL控件,使用“ATL控件”向导可以很容易地添加新ATL控件,操作步骤如下:

第1步:选择菜单栏“视图”|“类视图”命令,打开“类视图”列表框。在其中右键选择“MessageBoard”项目,选择右键菜单“添加”|“类”命令,打开“添加类”对话框。第2步:选择“类别”列表框中的“ATL”项目,选择“模板”列表框中的“ATL控件”项目,如图3所示:

图3 添加类对话框

单击“添加”按钮,打开“ATL控件向导”对话框。

第3步:单击“名称”标签,在“简称”编辑框中输入“MsgBoardCtl”(不包括引号)。

第4步:单击“选项”标签,勾选“连接点”复选框。单击“外观”标签,勾选“可插入”复选框,单击“完成”按钮完成控件的添加操作。

3 为控件添加属性

到目前为止,已经添加了一个ActiveX控件,此时先来编译一次项目。选择“生成”|“生成解决方案”命令,项目开始编译并构建。编译完成后为MsgBoardCtl控件添加一个属性,用于保存外部传入的消息文本,操作步骤如下:

第1步:右键单击“类视图”列表框中的“IMsgBoardCtl”项目,选择右键菜单“添加”|“添加属性”命令,打开如图5所示的“添加属性向导”窗口。

第2步:单击“属性类型”下拉列表框的下三角按钮,选择“BSTR”项目。在“属性名”编辑框中输入“msgText”,如图4所示:

图4 添加属性

单击“完成”按钮完成操作。

4 改写相关函数

开发环境默认生成的代码并不能完成本例所要完成的具体任务,因此需要重写相关函数或方法。这里实现的功能是在控件被重绘时将消息文本输出在屏幕上,需要重写OnDraw方法。操作步骤如下:

第1步:在“类视图”列表框中找到“OnDraw”方法并双击,如图5所示:

图5 定位OnDraw方法

此时代码编辑器中的光标定位到OnDraw方法的代码中,将OnDraw方法中原有的代码全删除,然后添加OnDraw方法代码。

第2步:在文件“MsgBoardCtl.h”中找到构造函数CMsgBoardCtl()并修改,实现对成员变量m_bstrMessag的初始化。

第3步:选择菜单栏“视图”|“解决方案资源管理器”命令,在“解决方案资源管理器”列表框中双击打开“MsgBoardCtl.cpp”文件。找到“get_msgText”方法和“put_msgText”方法并修改。

5 添加事件功能

ActiveX控件可以处理消息,借此实现用户交互。为控件MsgBoardCtl添加事件传出功能,当用户在控件上单击时,将单击事件传递给控件容器。操作步骤如下:

第1步:展开“类视图”列表窗口中的类型库“MessageBoardLib”。右键单击“_IMsgBoard CtlEvents”接口,选择右键菜单“添加”|“添加方法”命令,打开“添加方法向导”对话框。

第2步:在“添加方法向导”对话框的“返回类型”列表框中填入“void”。在“方法名称”编辑框中填入“ClickIn”,勾上“参数属性”下的“in”复选框,在“参数类型”下拉列表框中填入“LONG”,在“参数名”编辑框中填入“x”,单击“添加”按钮。重复添加参数操作,和第一遍不同的是在“参数名”编辑框中填入“y”。添加x、y两个参数后单击“完成”按钮退出“添加方法向导”对话框,如图6所示:

图6 添加方法

第3步:因为在此使用了老版本的导入库,此时项目编译链接会出两个小问题,所以须将项目配置为使用多字节字符集而不是unicode字符集,并设置C++默认内置字符类型为多字节。右键单击“类视图”列表框中的项目名称“MessageBoard”,选择右键菜单“属性”命令,打开“属性页”对话框。在左边的列表框中选择“配置属性”|“常规”项目,选择右边列表框中的“项目默认值”|“字符集”下拉列表框中的“使用多字节字符集”。

第4步:选择“属性页”左边列表框中的“配置属性”|“C/C++”|“语言”项目。单击右边列表框中的“将wchar_t视为内置类型”下拉列表框的下三角按钮,选择“否(/Zc:wchar_t-)”,单击“确定”按钮关闭“属性页”对话框。

第5步:编译项目,重新生成类型库。选择“生成”|“生成解决方案”命令,系统开始编译构建项目。生成完毕后,在“类视图”列表框右键单击“CMsgBoardCtl”项目,选择右键菜单“添加”|“添加连接点”命令。打开“实现连接点向导”对话框。双击“源接口”列表框中的“_IMsgBoardEvents”项目,“_IMsgBoardEvents”将出现在“实现连接点”列表框中,单击“完成”按钮退出。

6 添加事件激发功能

为了能够激发事件,必须让控件响应鼠标相关消息,并在消息处理程序中将事件传递给控件容器。如此外部的容器代码就能感知发生在控件中鼠标单击事件,添加事件激发功能的操作步骤如下:

第1步:右键单击“类视图”列表框中的“CMsgBoardCtl”项目,选择右键菜单“属性”命令,打开“属性”窗口。单击“消息”按钮,在消息列表框中找到“WM_LBUTTON

-DOWN”项目,双击其右边的空白表项,VS2010自动添加该消息处理程序并命名为“OnLButtonDown”,如图7所示:

图7 添加消息处理程序

第2步:打开“MsgBoardCtl.cpp”文件,修改“OnLButton -Down”方法。

7 编译生成控件

到目前为止,添加代码的工作已经完成,将发布方式配置为Release。Release方式将去掉目标代码中的调试信息并做了一些优化,发行版的产品通常采用这种方式,代码体积变小并且运行速度快。构造发行版的操作步骤如下:

第1步:单击工具栏上的“解决方案配置”列表框的下三角按钮,选择“Release”项目,如图8所示:

图8 生成解决方案

第2步:骤设置项目字符集属性。第3步:选择菜单栏“生成”|“生成解决方案”命令,VS2010开始编译构建MessageBoard控件。

其中“F9C695B2-5569-4F28-88FD-D9EB4E41055E”为控件“MsgBoardCtl”的GUID(全球唯一标识符,此串与读者文件中的不相同)。记下该字符串,这是在Web页中插入MsgBoardCtl控件时需要使用到该标识符。到当前工程目录下的Realese文件夹中,找到名为MessageBoard.dll的文件,它就是最后产出的程序组件,如图9所示:

图9 工程目录

将该文件复制到一个安全的文件夹中,以便在Web页中使用ActiveX控件。

8 使用ActiveX控件

前面使用VS2010创建了一个ActiveX组件。该组件在机器上注册以后即可在各种支持ActiveX组件的地方使用,其中也包括Web页。嵌入在Web页中的ActiveX控件可以和JavaScript交互。开始使用一个新的ActiveX控件之前必须先在机器上注册如图10所示:

图10 注册组件

注册MessageBoard组件的操作步骤如下:

第1步:单击“开始”菜单,选择“运行”命令,打开“运行”对话框。

第2步:在“打开”编辑框中输入regsvr32加空格加MessageBoard.dll文件的完整路径名,笔者已经将该文件复制到C盘的根目录下。因此输入的命令应该为“regsvr32

另一种使用ActiveX组件的方式是使用标签。本文将采用这种方式,将上前面创建的MessageBoard组件嵌入到HTML文档中。

9 总结

ActiveX控件可以解决网页程序无法操作客户端硬件的问题,使用它可拓宽了Web程序的应用领域。但ActiveX控件能否正常使用还要受浏览器设置的影响。如果在浏览器端禁用了ActiveX控件,相应功能将无法实现。可以事先设置好浏览器属性,对于其他的网站,可以提示用户设置浏览器属性以便允许ActiveX控件的启用。

参考文献

[1] 李跃峰,王文海.基于ActiveX技术的组态软件Web服务功能的设计和实现 [J].工业控制计算机,2007,07.

[2] 乐丹,黄明和,罗文兵.ActiveX Scripting技术在组态软件中的应用[J]. 工业控制计算机,2008(1):44-45.

[3] 周峰.Ajax开发技术原理与实践教程[M].北京:电子工业出版社,2011,9.

[4] [4] 夏帮贵.JavaWeb开发完全掌握[J].北京:中国铁道出版社,2011,7.(收稿日期:2015.09.25)

作者简介:邢素萍(1957-),女,南京工业职业技术学院,教授,研究方向:计算机软件设计与软件开发应用,南京,210000

文章编号:1007-757X(2015)12-0074-03

中图分类号:TP311

文献标志码:A

猜你喜欢
属性控件对话框
基于.net的用户定义验证控件的应用分析
正常恢复虚拟机
Bootlace Worms’Secret etc.
What Is Beauty?
关于.net控件数组的探讨
对两种实体观的探析
用好文件“属性” 解决实际问题
浅谈VB的通用对话框《CommonDialog》控件的使用
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
Spreadsheet控件在Delphi数据库系统中的编程与应用