需求推动了技术的发展,从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,往往会是另一应用程序崩溃)