现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

MFC,ATL,WTL的历史沿袭

2012-09-20 05:26 工业·编程 ⁄ 共 1194字 ⁄ 字号 暂无评论

    需求推动了技术的发展,从MFC到ATL,从ATL再到WTL的发展历程我想就是一个最好的见证。

    早期的VC++开发者们发现了MFC(Microsoft Foundation Classes) 这样一个好东东。他们发现,MFC提供了一个强大的类库,很好的满足了面向对象编程的需要。随着泛型编程技术的发展和时间的推移,慢慢地,他们慢慢觉得MFC的类库过于庞大和宽泛,而且它提供的模板库只覆盖了很有限的领域。于是,ATL应运而生

    ATL(Active Template Library),简称活动模板库。ATL的设计者们通过它来它提供快速的COM组件封装。ATL很好地体现了用模板进行编程的思想。如果模板设计得当,就很容易灵活的适应各种不同的需求,而且更容易跟进新技术的发展需求。

    但是,作为泛型编程的爱好者们始终要面对的一个主要难题,那就是如何方便地进行图形用户界面(GUI)设计。因为ATL只是提供了对Win32/64窗口的低级封装,因此ATL的使用者们在用ATL进行COM开发的同时,不得不借助于MFC来进行COM组件的UI编程。因为在GUI方面,ATL确实是爱莫能助。

    WTL(Windows Template Library)在体现模板编程思想的同时,对模板进行了很好的高级封装,很好的满足了UI编程的各种需求。这也是WTL设计者们的用意所在。在用WTL生成应用程序的时候不需要将DLL文件与EXE文件一起交付给用户,而且,WTL又有很好的兼容性。你可以将它与ATL, STL, VC++ 数据模板,第三方模板,或者你自己的模板这几种中的任何一种一起使用。正因为这些特点,使得当前WTL成为了大部分高级的C++开发者们进行UI设计时的首选。

从代码的层面比较WTL与ATL

    Win32/64 API 是由一系列C函数构成的集合,它覆盖了COM和Window编程的大部分领域。ATL是一系列的C++模板集,大部分是为COM编程服务的。Win32/64 API和ATL都只是提供了对于UI编程的低级支持。如ATL,WTL也是C++模板集,但是它很纯粹地集中于对UI编程的高级支持。

如下图所示,ATL调用Win32/Win64 API ,WTL调用ATL模板和Win32/Win64 API 。

WTL的功能体现和优势

WTL当前是第二个版本,第一个是3.1版,第二是7.0版。WTL的功能主要体现在以下几个方面:

· 提供应用程序框架

· 提供对UI的高级支持

· 封装Window控件,系统对话框以及GDI对象

它的优势体现在:

  • 不包含复杂的文档/视图框架
  • 具有源于MFC的基本的UI特性
  • 提升了一些MFC的特性(例如,更加灵活的切分窗口)
  • 比静态链接MFC的代码要小的多
  • 可对WTL进行bug修正,而不影响已存在的应用程序(MFC中如果通过替换MFC/CRT的DLL来修正一个应用程序中的bug,往往会是另一应用程序崩溃)

给我留言

留言无头像?