C++ STL,ATL,WTL之间的联系和区别(二)

2014-11-24 03:04:44 · 作者: · 浏览: 4
框,按钮等等)
公共控制(包括列表视图,树形视图,进度条,微调按钮)
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服务器。

WTL = Windows Template Library,可以说起源于ATL 类库中关于Window 创建/管理的类。主要原因是用原始的 WIN32 API 编写漂亮的用户界面工作量大,繁杂。MFC 虽然提供了一套很好的封装,但是也不是很容易消化和使用,特别是各个MFC 类之间耦合很紧,要用好 MFC 就要理解很多 MFC 内在的运行机制(有人说 MFC 的封装是“白盒”封装,呵呵)。WTL 利用 C++ 模版的高级功能,提供很联系很松散的“独立”的类库,使用起来比较方便,而且代码体积小,不必为了学习某个类必须学习一大堆相关的类。

但是 WTL 不是 Microsoft 官方正式支持的类库,虽然有相当多的人和越来越多的在使用;不过有可能将来会支持的。


________________________________________________

COM,COM+,OLE,ActiveX,ATL,MFC,STL,WTL

1. COM: Component Object Model 组件对象模型

包含以下两种组建类型:
OLE: ObjectLinkingandEmbedding 带有特殊接口的COM组件(对象的链接与嵌入),OLE中与链接和嵌入无关的部分现在已成为Active技术的一部分。详细信息,参考:Core_OLE_Background


ActiveX: 带有特殊接口的COM组件

(COM对象实现IDispatch一般可以称之为ActiveX,此外ActiveX一般具有界面)
包含如下两种组件实现方法
ATL
MFC
COM+: COM组建的运行环境,即COM库

Notes:

ActiveX是Microsoft提出的一组使用COM(ComponentObject Model,组件对象模型)使
得软件部件在网络环境中进行交互的技术集。它与具体的编程语言无关。作为针对Internet应
用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术

也被用于方便地创建普通的桌面应用程序。

ActiveX既包含服务器端技术,也包含客户端技术。其主要内容是:
  * ActiveX控制(ActiveX Control);用于向WEB页面、Microsoft Word等支持ActiveX
的容器(Container)中插入COM对象。
  * ActiveX文档(ActiveX Document);用于在WEB Browser或者其它支持ActiveX的容器中浏览复合文档(非HTML文档),例如Microsoft Word文档,Microsoft Excel文档或者用户
定义的文档等。
  * ActiveX脚本描述(ActiveX Scripting);用于从客户端或者服务器端操纵ActiveX控
制和Java程序,传递数据,协调它们之间的操作。
  * ActiveX服务器框架(ActiveX Server Framework);提供了一系列针对WEB服务器应用程序设计各个方面的函数及其封装类,诸如服务器过滤器、HTML数据流控制等。
  * 在Internet Explorer中内置Java虚拟机(Java Virtual Machine),从而使Java Applet能够在Internet Explorer上运行,并可以与ActiveX控制通过脚本描述语言进行通信。

2. ATL: Active Template Library 是开发COM和ActiveX组件的C++模板库

使用ATL能够快速地开发出高效、简洁的代码(EffectiveandSlim code),同时对COM组件的开发提供最大限度的代码自动生成以及可视化支持。
入口函数为 DllMain (进程内组件)
入口函数为 tWinMain (进程外组件)
入口函数为 CWinApp (ATL支持MFC)

在ATL产生以前,开发COM组件的方法主要有两种:一是使用COM SDK直接开发COM组件,另一种方式是通过MFC提供的COM支持来实现。
首先ATL的基本目标就是使COM应用开发尽可能地自动化,这个基本目标就决定了ATL只面向COM开发提供支持。
其次,ATL因其采用了特定的基本实现技术,摆脱了大量冗余代码,使用ATL开发出来的COM应用的代码简练高效,即所谓的“Slim Code”。
第三,ATL的各个版本对Microsoft的基于COM的各种新的组件技术如MTS、ASP等都有很好的支持,ATL对新技术的反应速度大大快于MFC。ATL已经成为Microsoft支持COM应用开发的主要开发工具,因此COM技术方面的新进展在很短的时间内都会在ATL中得到反映。这使开发者使用ATL进行COM编程可以得到直接使用COMSDK编程同样的灵活性和强大的功能。

3. MFC:MFC(Microsoft Foundation Classes),是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

4. STL: StandardTemplateLibrary 标准C++程序开发的模板库

是惠普实验室开发的一系列软件的统称,作为ANSI/ISOC++的一部分,已经被C++标准委员会正式采纳。STL的一个重要特点是数据结构和算法的分离,这使其非常通用。另一个重要特性为不是面向对象的,为了实现通用性。

STL有6大组件:algorithm(算法)、container(容器)、iterator(迭代器)、function object(函数对象)、adaptors(适配器)和allocator(记忆体配置器),其中最主要的是前三个组件。

___________________________________________

下面是一篇挺有意思的文章 讲MFC与ATL的关系 就如男人和女儿的关系

MFC与ATL的男女关系说起

男女关系

如果从哲学的观点来看,这大概要说是一种辩证关系了!

首先谈谈男人。男人与男孩的区别在于责任,对于一个男人来说,他的肩膀永远有负担,他要解决生活中遇到的所有问题,可以为妻儿带来幸福生活,可以赡养父母,可以做一些成就来创一番事业。所以男人不要