- 浏览: 1017366 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
Preface
因为项目需要,开始从事 ActiveX 方面的工作,看了一些资料,可惜都是些 COM 原理方面的,没有切合实际动手的东西,在 CodeProject 上读完 David Marcionek的 文章【1】后,收获良多,但也遇到一些恼人的小问题, 因此在其基础上就一些易错点做些小注解。本文版权归 David Marcionek 所有。
简介
本文目的在于让你快速掌握 ActiveX 控件开发技术,将会展示开发 ActiveX 应该知道的基本概念,如方法,属性和事件,以及如何在一个 ActiveX 控件和一个 web 页面之间进行通信
在本文中,我们将创建一个 ActiveX 控件,当加载控件时,它会显示一个动画进度条,以便向用户表明控件正在加载。此控件会包含展示如何在控件和 web 页面间传递信息的功能。下面我们会使用 VS2005 一步步进行开发的。
创建一个 ActiveX 控件
为了创建一个 ActiveX 控件,如下所示:
1, 创建一个 "MFC ActiveX Control" 项目,取名 MyActiveX,
2 ,在 "MFC ActiveX Control Wizard" 对话框中,选中 "Control Settings"
3, 在 "Create control based on" 中选择 "STATIC". 我们将使用静态控件,因为我们只是显示从控件中获取的输出信息,并不接受输入信息。
4 ,在 "Additional features" 中,确保 "Activates when visible" 和 "Flicker-free activation" 被选中, "Has an About box dialog" 不选中。
5 ,默认情况下, wizard 会创建一个项目,使其在一个共享 DLL 中使用 MFC. 我们必须更改这种情况,因为除非所需的 MFC DLL 都已经在系统中安装了,否则 ActiveX 控件 就不能运行。包含 ActiveX 控件的 Web 页面上出现红叉的一个原因就是此。在项目的属性中, "Configuration Properties"-->"General", 将 “Use of MFC” 改为 “Use MFC in a Static Library”.
6 ,向导会创建如下几个类:
1)CMyActiveXApp: 这是 ActiveX 应用程序类,从 COleControlModule 类继承下来的。它是 OLE 控件模块对象继承自的基类,包含了初始化 (InitInstance )和清理 (ExitInstance) 的代码
2)CMyActiveXCtrl: 从 COleControl 继承而来,这里是我们实现控件大部分功能的地方。
3)CMyActiveXPropPage: 从 COlePropertyPage 继承而来,用于管理控件的属性页对话框。向导已经为我们创建了一个默认的对话框来作为控件的属性页对话框。
增加动画 GIF 支持
这里我们使用了一个 CPictureEx 类(具体代码见最后的 “ 资源 ” 部分), vs2005 增加一个动画 GIF 资源有一个 bug (其实在 vs2008 中也存在),我们可以使用下面这种技巧来回避它:
将
ProcessingProgressBar.gif
拷贝到项目文件夹下,然后更名为
ProcessingProgressBar.gaf
,
在资源视图中,右键资源文件
MyActiveX.rc,
选择
“
添加资源
”
。在
“
添加资源
”
对话框中,按下
”
导入
“
按钮,并选择
ProcessingProgressBar.gaf
文件。在
”
自定义资源类型
“
对话框中输入
“GIF”
作为资源类型。这就会将
GIF
图片文件导入项目中。然后将导入的图片
ID
从
IDR_GIF1
改为
IDR_PROGRESSBAR
.
。
现在开始着手恢复原状,首先,打开
MyActiveX.rc
的源文件,找到
IDR_PROGRESSBAR
的定义,将其文件名改为
”
ProcessingProgressBar.gif
”.
同样地,把项目文件夹下的图片文件名也改回为
“ProcessingProgressBar.gif”,
最后在
“
解决方案资源管理器
”
视图中,选中
ProcessingProgressBar.gaf
,在其
”
属性
“
中,修改
”
相对路径
“
为
”
."ProcessingProgressBar.gif”.
增加对话框
现在,我们为进度条图像增加一个对话框。
1, 在 “ 资源 “ 视图中,右键 ” 对话框 “ ,选择 ” 插入对话框 “ 来创建一个默认的对话框。
2, 删除默认产生的 “ 确定 “ 和 ” 取消 “ 按钮,调整对话框大小为 230*40 。
3,
更改对话框
ID
为
IDD_MAINDIALOG
,并修改对话框属性:
Border—none,
Style – Child, System Menu – False, Visible – True.
4,
在对话框中加入一个图片控件,调整其大小为
200*20
,更改控件
ID
为
IDC_PROGRESSBAR
,颜色为
“white”
。
5,
为对话框创建一个类,名为
CMainDialog,
现在我们为类增加成员变量:
1,
为
CMyActiveXCtrl
类增加一个变量
m_MainDialog
,类型为
CMainDialog
2,
为
CMainDialog
类增加一个变量
m_ProgressBar
,类型为
CPictureEx
,这里注意确保
“
控件变量
“
选中,并且对于的控件是
”IDC_PROGRESSBAR”.
增加支持代码
好了,现在加入一些代码来绘制主对话框和进度条控件吧。
1
,为
CMyActiveXCtrl
处理
WM_CREATE
事件的代码,在其中加入:
并在
OnDraw
函数中加入:
CBrush brBackGnd(TranslateColor(AmbientBackColor()));
pdc -> FillRect(rcBounds, & brBackGnd);
2.
在
CMainDialog
类中,加入处理
WM_CREATE
事件的代码,在其中加入:
m_ProgressBar.Draw();
Ok, 一个简单的 ActiveX 控件已经开发完毕,设置编译模式为 “Release” 模式,并构建整个应用程序。
创建一个
Web
页面作为
ActiveX
控件容器
可以使用微软的
ActiveX Control Pad
。要利用它在
Web
页面中插入一个
ActiveX
控件,在
<BODY>
标记中右键,选择
“Insert ActiveX Control”,
选择你需要的就可以了。
直接打开
Web
页面或者放到
IIS
服务器上进行访问,一切顺利的话就可以看到下面的图像:
注1:前面要求设置编译模式为“
Release”
,其实是为了避免运行时因为触及
Assert
出错而做的,否则会报错如下:
跟踪调试后会发现:
可以看出是图片扩展控件加载时的顺序有些问题,但在浏览器中并不需要考虑如此多,因此这里忽略此
Assert
条件。
注
2
:作
者在这里没有对
MyActiveX.idl
文件进行讲解,我认为是一个不小的失误,也正是因为如此,才会导致一个很容易犯错的地方,当我们按照他的教程,仿照他的代码一步步进行完后,却发现在
ActiveX
测试容器中是可以运行通过的,但到了浏览器中却死活都是红叉叉。。。,就是因为作者忽略了其对
MyActiveX.idl
接口定义文件的修改进行解释。
注3:VS2008中没有ActiveX控件测试容器了,VS05以上的数字签名工具也改变了,因此使用VS2005可能更好
我按照教程一步步模仿着做的时候,在上面这两点上纠缠了3个多小时才发现问题的原因。
在下一篇文章中,将介绍如何对
ActiveX
控件进行数字签名并使其自注册和销毁来确保其安全性,此外还会介绍如何在
ActiveX
控件和
Web
页面间进行数据通信。
参考资源
1
,
A Complete ActiveX Web Control Tutorial
By David Marcionek
2. Add GIF-animation to your MFC and ATL projects with the help of CPictureEx and CPictureExWnd
by Oleg Bykov, CodeProject.
作者:洞庭散人
出处:http://phinecos.cnblogs.com/
发表评论
-
NotePad++ - 安装和配置C/C++开发插件
2011-11-15 23:00 1847NotePad++ - 安装和配置C/C+ ... -
VC中使用ATL编写控件 【转】
2011-10-21 15:23 2146VC中使用ATL编写控件 作者:邵盛松 2010 ... -
在Windows环境下MongoDB搭建和简单操作【转】
2011-10-21 12:37 1001一,安装mongoDB 1,解 ... -
Mongodb在Windows下安装及配置【转】
2011-10-21 12:35 5911.下载mongodb的windows版本,有32位和64位版 ... -
一篇介绍VC开发OCX的文章[转]
2011-10-20 17:57 1932转自“http://www.cnblogs.com/genga ... -
使你的ActiveX控件执行时不弹出安全性提示 (转载)
2011-10-20 17:56 1218使你的ActiveX控件执行时不弹出安全性提示 2010-0 ... -
VC++ 的MFC 和ATL 及COM 是什么?
2011-10-20 01:12 1027一、什么是MFC 微软基础类(Micro ... -
使用ATL编写一个简单的COM服务器【转】
2011-10-20 01:10 903下载例子代码 本文的对象是COM编程 ... -
使用VC++6.0制作ASP服务器控件简介[转]
2011-10-20 01:10 709用ASP写网页的程序 员,一定对VBSript语句“Set ... -
基于CentOS 5.4搭建nginx+php+spawn-fcgi+mysql
2011-09-01 13:49 1578基于CentOS 5.4搭建nginx+php+sp ... -
解决mrtg的Use of uninitialized value in hash element at /usr/bin/indexmaker line 35
2011-09-01 13:41 2345mrtg的安装过程这里就不再阐述,随便搜索一下。使用ind ... -
用MRTG检测Linux网络性能
2011-09-01 10:49 921随着Linux应用的日益广泛,有大量的网络服务器使用Linux ... -
Linux安装配置maven3.0以及搭建nexus私服
2011-08-30 23:45 1676一、软件准备 1、apache-maven-3.0-b ... -
GraphicsMagick介绍及安装
2011-08-30 23:16 1567作者:Cocowool 来源:博客园 发布时 ... -
Makefile
2011-08-30 22:10 903CC = g++ CFLAG = -Wall -g -w ... -
高位字节优先 低位字节优先
2011-08-24 17:30 1220自第一台计算机诞生, ... -
C++方式的文件操作
2011-08-24 16:05 1853本文主要讨论C++标准I/O库,主要内容为控制台输入输出流 ... -
【JAVA实用工具】JNA-通过它调用C++的方法,比JNI方便很多访问网站需要代理,所以把它COPY出来备忘
2011-08-24 00:33 3220How To Get Started Using JN ... -
Jni中C++和Java的参数传递
2011-08-24 00:04 5166如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对 ... -
aaaaa
2011-08-24 00:04 1037如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对 ...
相关推荐
在现代Web开发中,"Web前端工程化与组件化开发实践"已经成为提升开发效率和代码质量的重要手段。本文将深入探讨这两个概念,并结合具体的实践案例,解析如何在JavaScript开发中应用它们。 首先,前端工程化是指通过...
通过学习这个C#组件开发简易教程,你将能够理解组件的基本概念,掌握组件开发的关键技术和实践,为构建高效、可维护的C#应用程序打下坚实基础。在实际开发过程中,不断实践和优化,将使你成为组件开发的专家。
Vue项目组件化工程开发实践方案 本文将详细介绍Vue项目组件化工程开发实践方案,涵盖组件库、文档工程和例子工程三个方面。通过引入vde-cli脚手架,可以快速生成组件库工程目录结构,并且可以自动更新文档工程和...
**VC++ 编写COM组件教程** COM(Component Object Model)是微软提出的一...以上内容涵盖了创建和使用COM组件的基本知识,通过学习和实践,你可以熟练地利用VC++开发出高效的COM组件,并在不同的应用程序中灵活使用。
总之,Delphi组件开发是一个既有趣又实用的领域,掌握了组件开发技术,不仅能够提高编程效率,还能让你的程序具有更丰富的功能和更高的可扩展性。通过不断实践和学习,你将能够在Delphi的世界里游刃有余。
ASP组件开发指南主要涵盖了几大核心知识点,这些知识点对于深入理解和构建高效、可复用的ASP应用程序至关重要。本文将详细阐述这些关键概念。...不断探索和实践,将有助于你在ASP组件开发领域积累深厚的专业技能。
【前端组件化开发实践 -1】 前端开发领域中,组件化是一种重要的开发模式,它能够有效地管理和控制项目复杂性。随着技术的发展,组件化已成为现代前端框架的核心特性,如React和Vue等。美团点评技术团队在实践中也...
QT生成COM组件并调用COM组件测试工程是一个涉及Qt框架与...通过这样的项目实践,开发者可以深入理解Qt与COM的集成,提高跨平台和跨语言组件开发的能力。同时,这也是对C++编程、对象接口设计和软件集成能力的一次锻炼。
基于组件开发(Component-Based Development,简称CBD)是一种现代软件工程方法论,其核心思想在于通过重用预先构建的软件组件来构建新的软件系统,以此提高软件开发效率,降低开发成本,提升软件质量。然而,CBD的...
开发com组件_com开发 vs_vs com组件开发** 在软件开发中,组件(Component)是一种可重用的代码单元,它可以独立于应用程序而存在,并能被多个应用程序共享。COM(Component Object Model)是微软提出的一种组件...
《MapGis组件开发手册》是一本专注于MapGis组件技术的权威指南,它深入浅出地阐述了组件开发的基本理论和实践技巧。MapGis作为一款强大的地理信息系统(GIS)软件,其组件化开发模式为用户提供了丰富的自定义功能和...
这些资料对于深入理解COM组件的原理和实际应用有着极大的帮助,可以帮助读者从基础到实践,全面掌握COM组件的开发和使用技巧。 总之,COM组件是Windows编程中的重要组成部分,理解并熟练使用COM组件,可以提升...
组件开发教程是一个面向初学者的指南,主要涵盖了COM(Component Object Model)技术的各个方面,旨在帮助读者理解并掌握COM组件的开发。COM是微软提出的一种软件组件标准,它允许不同程序之间共享代码和服务,实现...
《Delphi组件开发指南中文版》是一本专为Delphi开发者设计的详尽教程,旨在帮助读者深入理解和掌握在Delphi环境下进行组件开发的核心技术。Delphi是一款强大的面向对象的集成开发环境(IDE),以其高效的编译器和...
在iOS应用开发中,组件化是一种重要的架构设计方法,它能有效地提高代码的复用性、可维护性和团队协作效率。本文将探讨iOS App组件化的实践,主要关注以下几个方面: 1. **组件化概念**:组件化是将一个大型的应用...
总的来说,这个资源包是学习和实践COM组件、ATL和MFC的好材料,涵盖了从基础组件开发到高级应用的多个层面。通过这些项目,开发者可以深入理解COM的原理,掌握ATL和MFC的使用技巧,提升在Windows平台上构建组件和...
《Visual C#基于组件的开发》是一份深入探讨C#组件开发技术的宝贵资源,它涵盖了从基础到高级的各种主题,旨在帮助开发者更好地理解和实践组件编程。这份资料被分为三个部分,每个部分由一系列PDG文件组成,这些文件...
- **选择开发工具**: Microsoft Visual Studio提供了方便的COM组件开发环境,如Visual C++或Visual Basic。 - **创建项目**: 新建一个ATL(Active Template Library)工程,ATL是微软提供的一套模板库,简化了COM...
在标签中,“Linux操作系统”、“系统开发”、“参考文献”和“专业指导”表明文章可能详细介绍了Linux系统下进行组件开发的相关技术和最佳实践,可能包括了具体的技术实现、开发工具以及可供开发者参考的技术对比。...