工地宿舍照片:关于STL/ATL/WTL之间的区别
关于STL/ATL/WTL之间的区别
分类: ATL/COM/ACTIVEX2010-11-11 13:36 74人阅读 评论(0) 收藏 举报在这之前我一直在使用MFC框架,现在要学习WTL似乎有些牵强......
俗话说得好:“工欲善其事,必先利其器”,还是先将基本术语搞清楚吧!
1、STL 即 Standard Template Library
STL(标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、 Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C+ +中,但在被引入C++之前该技术就已经存在了很长的一段时间。
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭 代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类 组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文 件:、、
另一方面,ATL结构完全针对COM中的诸多规范,这就要求使用人员必须非常了解COM规范,才有可能真正把ATL用好对于COM应用的开发,ATL无疑 是首选的工具,与MFC相比,ATL的规模还不算大,但是从上述的介绍我们可以看出,ATL涉及到了COM的方方面面。实际上,ATL的内容还要多得多, 比如OLE DB的支持、MTS的支持等,尽管如此,如果我们有了这本书中的内容为基础,那么再去学习这些扩展的内容就会容易得多,结合ATL中实现COM的基本手段 加上这些应用技术的背景知识,我们可以很容易地掌握这些开发技术。
但是如果我们要想熟练掌握甚至精通ATL的话,那么这只是一个开头,前面还有漫长的路要走。原因有多方面,一则COM本身异常复杂,不下苦功难窥全貌;二 则ATL确实奥妙很多,它体现了C++语法的博大精深;三则ATL还存在很多错误,虽然本书作者指出了一些错误,但实际的错误肯定更多,这就对ATL使用 者提出了更高的要求,如果使用过程中不能发现这些错误或者避开这些错误,那么用ATL反而会阻碍我们的工作。
虽然ATL比较精深,但是这本书的讲解非常通俗易懂,语言比较简练,条理非常清楚。即使在读完这本书之后,它仍然可以作为参考书指导我们的开发和学习工作。我想,这就是好书的价值所在吧。
3、WTL即Windows Template Library
在ATL出现的时候,一些部分COM的编程人员开始觉得开发COM运用是一种快乐,因为使用它很方便地开发小规模的COM组件,但好景不长,现实的COM 组件是包罗相当广泛的,特别当它们准备使用包装我窗口控件,发现ATL提供了相当的稀少。因此Microsoft推出了半成品与没有技术支持的WTL,这 也是WTL诞生的原因。
很多初次接触WTL都问“WTL这三个字母代表什么呢?”:WTL全称为Windows Template Library,构架于ATL之上,采用C++模板技术来包装大部窗口控制,并给出一个与MFC相似的应用框架。
他们紧跟着问“那我如何得到它呢?”:由于WTL是Microsoft推出的,在Microsoft的PlatForm SDK中就有WTL是ATL的扩展,也是由ATL小组开发,包含在Microsoft于2000年1月发布的开发平台SDK包中(也可以从 Microsoft网站上下载),虽然Microsoft没有正式支持。WTL通过提供一个用于编写Win32应用程序和控制的轻量级的框架,一些特殊的 视图,GDI对象和实用的类,来扩展了ATL窗口类WTL设计特性--附带地,相对于MFC的优势--包括:
模板化,因此有较小的代码量。 例如,一个简单的“hello world”SDI应用程序,基于WTL的程序只有24KB,而MFC静态连接结果是440KB,MFC动态连接的结果是24KB+1MB。无太多相关 性,并且可以自由地和SDK代码直接混合。不会强迫使用特定的应用程序模型,尤其相对于MFC的应用程序框架。
WTL类包括:
标准控制(编辑框,列表框,按钮等等)
公共控制(包括列表视图,树形视图,进度条,微调按钮)
IE控制(rebar,平面滚动条,日历等等)
命令条,菜单,和更新UI类
公共对话框
属性单和页类
框架窗口,MDI框架和子框架,分隔条,可滚动的窗口
设备环境(DC)和GDI对象类(笔、刷子、位图等)
打印机及其信息和设备模式类
实用工具类:包括CPoint, CRect, CSize, 和CString类
WTL AppWizard允许你生成SDI、MDI、多线程SDI和基于对话框的应用程序。多线程SDI应用程序就象IE或Windows Explorer(我的电脑),看起来象是启动了多个实例,实质上它们是同一进程的多个视图。这些视图可以是普通的基于CWindowImpl的窗口,或 基于窗体、列表框、编辑框、列表视图、树形视图、丰富文本编辑框或HTML控制。你可以让你的应用程序拥有rebar、命令条(如同Windows CE)、工具条或状态条。你的应用程序可以包含ActiveX控制,甚至可以是一个COM服务器。