第一章 什么是ActiveX控件?

什么是ActiveX控件?

ActiveX控件是提供了许多能够被其他应用如IE和其他如由Visual Basic和Visual C++开发工具创建的应用程序重用的一些泛函数的可编程基础.ActiveX控件是存储在动态链接库(DLL)文件和拥有.ocx或.dll后缀文件中的COM对象.

NOTE
When the client application needs to use the ActiveX control, DLL files are loaded into the client application's address space. Because the DLL file is loaded into the same process as the client's, ActiveX controls are typically referred to as In Process (InProc for short) COM objects.

Activex控件和将在第2章讨论的固有控件很相似:他们代表性的提供了一个图形接口,比如按扭或文本框,通过他们,用户可以让这些控件相互作用.和固有控件相似的,ActiveX可以拥有方法,属性和集合,它们能触发事件.然而,考虑到控件,一个对象不需要有图形用户接口或公共的方法,属性,事件和集合.如果一个控件没有这些特点中的一个-----比如,没有用户接口,方法-----这个控件相当糟糕,根本没用.因此本章的每一个控件例子包含了一个用户接口和许多方法,属性和事件.

没有用户接口,但是至少有一个公共方法,属性,事件或集合(有时候都有)的对象被认为是COM对象.尽管没有用户接口,COM对象仍然很有用.COM对象总是被创建成提供许多不需要用户接口或是用户接口与它无关的公共方法-----比如,你不需要在网页中拥有从数据库读取数据和插入数据的系统.ActiveX控件能够被客户端重用,同样的COM对象能够被客户端应用程序重用.在本章,我们将集中创建ActiveX控件,但是任将介绍简单的COM对象(不相似)来创建ActiveX控件.

插入ActiveX控件到web页面中

在学习怎样创建ActiveX控件之前,你需要知道怎样在web页面上插入将被装载进IE的控件.我们将在本章中使用IE来测试我们创建的所有控件.在web页面中插入ActiveX控件是很简单的.你只需使用HTML<object>标签.这个标签就象<H1>,<p>或其他任何我们将在第2章讲述的HTML标签一样.因为在DHTML对象模型中,所有的HTML元素都被设计成一个对象,你可以象写其他HTML元素一样写出<OBJECT>标签.在本章稍后的"给Visual Basic控件编写脚本"和"给ATL控件编写脚本"节中,你将知道怎样为ActiveX控件编写脚本.

<OBJECT>标签拥有和其他任何HTML标签一样的属性.CLASSID是所有属性中最重要的.它告诉IE装载哪一个控件到页面中.CLASSID属性指向了ActiveX控件的class Id(缩写CLSID).CLSID是标识ActiveX控件或许多其他COM对象类型的128位全局唯一标识符(GUID).

GUID保证时间,空间跨越的唯一性.比如,如果某人在南极洲(可能出现)创建了一个CLSID,在同一个准确时间,你在美国也创建了一个,CLSID将会不同.(如果某人在某处老家创建一个GUID,GUID将照样唯一!)用来创建GUID或CLDID的算法是很复杂的,所以本书将不会介绍.相信我-----它没问题.

你可能想知道为什么不能只给ActiveX控件取一个有关系的名字,象"Bob"来代替GUID,这样将很难阅读.想象比如你给你的ActiveX控件取名为"Bob",有人在津巴布韦取了相同的名字.如果用户在她机器上安装了你的控件,然后安装津巴布韦的控件,客户端应用程序想用"Bob"控件,将总是使用的津巴布韦的控件.为什么?安装来自津巴布韦的"Bob"控件将使你的控件不可用,因为都用了相同的名字.

在很多项目中,这种情况将会导致版本问题,因为客户端应用程序可能已经被创建成访问在你的控件的存在的方法和属性但是在来自津巴布韦的控件不存在.如果你使用GUID来标识你的控件,客户端应用通过控件的CLSID来引用将保证能够访问到你的控件而不是来自津巴布韦的控件.

CLSID被存储在以下的注册表键中:

HKEY_CLASSES_ROOT/CLSID

在注册表的这个键下可能有成百上千的CLSID来标识你系统中的ActiveX控件和其他的COM对象.图5-1显示了注册表中的Calendar控件的CLSID:

{8E27C92B-1264-101C-8A2F-040224009C02}
如果你仔细查看注册表编辑器的右框,你会找到这个键值.这个键值里面列出了与"Calendar Control 8.0"相关
的名字.所有的CLSID都有相同的格式:他们都是一个128位的数字标识.
Click to view at full size. 
图5-1 注册表中日历控件的CLSID.
现在关于CLSID你已经知道一点了,我们再来看看CLASSID的属性.CLASSID属性告诉IE你想装入页面的ActiveX
控件的CLSID,当给<Object>标签指定CLASSID时,你必须首先在CLSID值加一个"clsid"前缀,不要包含你在注
册表中直接看到的CLSID.例如,要把日历控件嵌入页面,你要把下面的HTML代码加入到页面中.代码运行结果如图5-2.
<OBJECT CLASSID="clsid:8E27C92B-1264-101C-8A2F-040224009C02"></OBJECT>
IE查找到<Object>标签以后立即查找CLASSID属性.然后IE读取CLASSID属性的值,即你想插入到页面的ActiveX控
件的CLSID,然后在注册表中查找该CLSID.如果IE在注册表中查找到CLSID,它就读取名为InprocServer32的
子键,它是指定页面显示IE应该载入到页面的名为DLL(.ocx或.dll文件)的名称和路径.图5-3显示了日历控件的
InprocServer32键.
Click to view at full size.
图5-2 日历控件插入到页面
当你看到图5-3注册表编辑器右框内InprocServer32键,你看到两个值,第一个值是默认值,它指定为ActiveX控件
 
载入DLL的路径和名称.对于日历主件,(Default)值指定了文件mscal.ocx的路径C:/WinNT/System32.第二个值
 
是ThreadingModel.
 
  
  
NOTE
I won't cover the advanced COM topic of threading models in this book. Just note that the threading model we're talking about is the Apartment model. Only controls that support at least the Apartment-threading model can safely be used on a Web page in Internet Explorer. I'll show you how to mark controls as Apartment threaded when we create ActiveX controls.
 
Click to view at full size. 
 
图5-3 日历主件的InprocServer32值
 
除了CLASSID,你可能想为<OBJECT>标签指定一些其他重要的属性.要为ActiveX控件编写脚本,你需要包含ID属性和
给它指定任意的名称,就象你想为其他HTML标签写脚本一样.有时候为<OBJECT>标签指定HEIGHT和WIDTH属性也很重
要.如果不这样,控件可能不会正常显示因为IE不是自动调整.我们将在"创建Visual Basic ActiveX控件"这章研究.
 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《VC深入详解第3版PDF》是一本介绍Visual C++编程的书籍,该书主要针对具有一定编程基础的开发者,讲解了VC编程的高级应用和技巧。 该书分为10章,从Windows程序设计基础、MFC应用程序框架、视图类、文档类、数据库编程、多线程编程、网络编程、COM组件开发、ActiveX控件开发以及VC程序调试与优化等方面进行了深入系统的讲解,全面介绍了VC编程的相关知识和技术,对开发者有很大的帮助。 在该书中,作者通过丰富的实例和详细的代码讲解,让读者深入了解VC编程的常见问题和解决方法。同时,书中还介绍了一些重要的编程工具和技巧,如调试工具的使用、Windows消息机制、数据类型转换等,这些内容可以帮助读者从更高的角度理解VC编程,并更好地掌握其技术特点。 总之,《VC深入详解第3版PDF》是一本对VC编程进行深入研究和学习的优秀书籍,同时也适用于希望提高Windows程序设计和开发的程序员。该书具备丰富的内容和深入的讲解,对VC编程感兴趣的开发者将有所裨益。 ### 回答2: VC 深入详解 第3版 PDF 是一本介绍 Microsoft Visual C++(VC++)程序设计语言的详尽指南。本书在深入介绍 C++ 语言和编程基本概念的基础上,重点讲解了 VC++ 的程序设计和开发理念、各种功能和应用方法。本书内容全面,包括 VC++ 编译器、Windows 应用程序开发、图形用户界面设计、多线程编程、应用程序框架、数据库编程、网络编程等多个方面,对新手和资深程序员都有较高的指导作用。 本书第三版相对于前两版更新换代,其主要变化在于增加和更新了一些章节,完善了一些概念和应用。例如,本版增加了针对 Windows 8、Windows 10、Visual Studio 2013 和 2015 等新技术和工具的章节,更新了若干图形界面设计和控件使用的方法,增加了多线程、数据库和网络编程等方面的实例等等。同时,本书也对一些旧版章节进行了深入拓展和重制,以提高其可读性和可操作性。 值得注意的是,本书虽然以 VC++ 为主轴,但其对 C++ 语言本身也有广泛的涉猎,对于学习 C++ 编程的初学者也具有较好的指导作用。此外,本书的内容偏向实战操作,有大量具有代表性的应用实例供读者参考和尝试,这对于帮助读者掌握 VC++ 编程技术和提高实战操作能力都是有益的。 总之,《VC 深入详解 第3版 PDF》是一本帮助程序员深入理解 VC++ 编程技术和应用的权威性指南,具有较高的指导作用和实际价值。 ### 回答3: 《VC深入详解》是一本介绍Microsoft Visual C++编程语言和开发工具的书籍,此书分为入门篇和深入篇两部分,全书共分22章,对VC语言的基础知识、面向对象编程、MFC程序框架、窗口、对话框、菜单、工具栏、绘图、多媒体等方面进行了详尽的讲解和实践操作。第3版更新了最新版本的VC++ 2013和MFC,对原有的内容进行了更新和完善。 此书的深入详解部分具有较强的实践性和实用性, chapters中包括了Windows应用程序设计、高级算法、网络编程、多线程编程、数据库编程、动态链接库、ActiveX控件与COM、ATL和.NET等内容。并且此书结合了理论和实践,每个章节都有完整的实例程序,并且结合具体应用场景进行分析,让读者不仅能够掌握基本知识,还能够提升对VC编程的实际应用能力。 总体评价而言,《VC深入详解》是一本较为全面和权威的VC编程实战教程,适合于具有C/C++编程基础者进行深入学习,对于从事Windows软件开发的程序员和学生都具有很高的参考价值。在VC++编程学习中,这本书是一份必备工具书,对于提高编程能力有很大的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值