`
lifaming15
  • 浏览: 58625 次
  • 来自: ...
文章分类
社区版块
存档分类

第一章 什么是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控件"这章研究.


  


  
分享到:
评论

相关推荐

    学用Visual.C.6.0开发Active.X控件

    第一章 COM入门 第二章 ATL入门 第三章 MFC入门 第四章 在ATL中创建Internet Explorer(Lite)ActiveX控件 第五章 在ATL中创建Full ActiveX控件 第六章 ATL对ActiveX控件的属性页面的支持 第七章 ATL中对ActiveX控件...

    闻怡洋VC专题教程ActiveX控件开发 进程/线程控制 文件操作 内存管理

    +-- 第一章 Internet相关开发 |------ 1.1 如何编写CGI程序 |------ 1.2 一种更亲切的CGI开发系统WinCGI |------ 1.3 利用ISAPI开发CGI程序 |------ 1.4 利用WinInet开发Internet程序 +-- 第二章 ActiveX控件开发 ...

    MFC各类控件入门学习

    我们在前面曾提到过,控件是一些行为标准化了的窗口,一般用于对话框或其它 窗口中充当与用户交互的元素。...在本章我们仅讲述第一类控件,即 Windows 标准控件。所涉及的内容包括各个控 件的使用及相应的技巧。

    VB6.0中文版控件大全2

    共有5章 第一章 公用属性 第二章 公用方法 第三章 公用事件 第四章 常用控件 第五章 扩展(Activex)控件 做了详细的书签

    VB6.0中文版控件大全1

    本书详细介绍了VB6.0的控件及相关事件 共有5章 第一章 公用属性 第二章 公用方法 第三章 公用事件 第四章 常用控件 第五章 扩展(Activex)控件 做了详细的书签

    21天学会VB编程pp教程

    第一章概述 第二章语言基础 第三章程序控制结构 第四章数组 第五章过程和函数 第六章应用程序用户界面 第七章通用标准控件 第八章扩展控件 第九章菜单、工具栏和状态栏 第十章文件系统 第十一章图形与图像 第十二章...

    VB6.0详细讲义(VB6实用教程_VB6从入门到精通)

    第一章 Visual Basic介绍 第二章 用户界面设计 第三章 编程的基础(含变量,常量,条件语句,循环语句,自定义变量,自定义过程,对象和类等基础) 第四章 Windows 95的新控件Visual Basic的输入输出 第五章 Visual ...

    VB6.0详细讲义

    第一章 Visual Basic介绍 第二章 用户界面设计 第三章 编程的基础(含变量,常量,条件语句,循环语句,自定义变量,自定义过程,对象和类等基础) 第四章 Windows 95的新控件Visual Basic的输入输出 第五章 Visual ...

    Microsoft visual c++ 6.0 programmer's Guide 程序员指南

    例1:什么都不做的ActiveX控件 例2:Tower ActiveX控件 向ActiveX控件项目添加属性页 第10章 用ATL编写ActiveX控件 ATL和包容器应用程序 ATL和ActiveX控件 示例1:Pulse ActiveX控件 例子2:TowerATL ActiveX控件 ...

    Excel_VBA程序开发自学通正文

    第一章 从Excel插件认识VBA 第二章 VBA概述 第三章 巧设VBA编辑器提升编程效率 第四章 VBA基本概念 第五章 VBA数据类型与变量、常量 第六章 认识VBA过程及开发自定义函数 第七章 VBA的对象模型与对象表示法 第八章 ...

    零基础学VisualBasic+SQLServer 光盘 源文件 第10-20章.rar

    第4章 常用ActiveX控件 第5章 窗体、菜单与对话框 第6章 Visual Basic网络编程 第7章 使用资源文件 第8章 Visual Basic类模块的开发 第9章 程序调试与错误处理 第10章 发布程序和创建帮助 第二篇 SQL Server基础篇 ...

    零基础学VisualBasic+SQLServer 光盘 源文件 第05-07章.rar

    第4章 常用ActiveX控件 第5章 窗体、菜单与对话框 第6章 Visual Basic网络编程 第7章 使用资源文件 第8章 Visual Basic类模块的开发 第9章 程序调试与错误处理 第10章 发布程序和创建帮助 第二篇 SQL Server基础篇 ...

    零基础学VisualBasic+SQLServer 光盘 源文件 第08-09章.rar

    第4章 常用ActiveX控件 第5章 窗体、菜单与对话框 第6章 Visual Basic网络编程 第7章 使用资源文件 第8章 Visual Basic类模块的开发 第9章 程序调试与错误处理 第10章 发布程序和创建帮助 第二篇 SQL Server基础篇 ...

    零基础学VisualBasic+SQLServer 光盘 源文件 第01-04章.rar

    第4章 常用ActiveX控件 第5章 窗体、菜单与对话框 第6章 Visual Basic网络编程 第7章 使用资源文件 第8章 Visual Basic类模块的开发 第9章 程序调试与错误处理 第10章 发布程序和创建帮助 第二篇 SQL Server基础篇 ...

    零基础学VisualBasic+SQLServer 光盘 源文件 第22-24章.rar

    第4章 常用ActiveX控件 第5章 窗体、菜单与对话框 第6章 Visual Basic网络编程 第7章 使用资源文件 第8章 Visual Basic类模块的开发 第9章 程序调试与错误处理 第10章 发布程序和创建帮助 第二篇 SQL Server基础篇 ...

    WPF揭秘 第一章 wpf 开发

    第一部分 背景 第1章 为什么创造WPF   1.1 回顾过去   1.2 步入WPF   1.3 作为.NET Framework的组成部分   1.3.1 为托管代码而设计   1.3.2 强调声明式描述   1.4 小结   第2章 XAML揭秘  ...

    ArcGIS Engine中文开发指南清晰版

    什么是ArcGIS控件? 40 使用ArcGIS控件 41 MapControl和PageLayoutControl 44 GlobalControl和SceneControl 45 ReaderControl 46 TOCControl和ToolbarControl 47 用ToolbarControl建立应用程序 48 建立不带...

    ArcGIS Engine中文开发指南

    什么是 ArcGIS 控件? 40 使用 ArcGIS 控件 41 MapControl 和 PageLayoutControl 44 GlobalControl 和 SceneControl 45 ReaderControl 46 TOCControl 和 ToolbarControl 47 用 ToolbarControl 建立应用程序 48 建立...

    Visual C++编程与项目开发 李英编著华东理工大学出版社 源代码

    全书共包括十七章:第一章软件开发环境与软件项目开发过程,第二章C++语言基础,第三章Windows应用程序编程与MFC,第四章文档/视图结构及其编程,第五章程序界面设计,第六章对话框与控件,第七章绘图,第八章文件操作,第九...

    Visual C++编程与项目开发 实验指导书

    全书共包括十七章:第一章软件开发环境与软件项目开发过程,第二章C++语言基础,第三章Windows应用程序编程与MFC,第四章文档/视图结构及其编程,第五章程序界面设计,第六章对话框与控件,第七章绘图,第八章文件操作,第九...

Global site tag (gtag.js) - Google Analytics