【涉及到头文件】
ATL: atlstr.h, atlsimpstr.h
MFC : cstringt.h、afxstr.h
WTL : atlmisc.h
ATL和MFC有关剪不断理还乱的关系,为了更容易分析,我们先要理清这四个头文件间的关系。观察相互间观察顺序,可以得出:
atlstr.h引用cstringt.h,cstring引用atlsimpstr.h,afxstr.h引用cstringt.h,由此可得出下图:
【atlsimpstr.h 都干了什么】
1、定义了 CStringData 和 CNilStringData 类(前篇已述,此处略)
2、定义了 ChTraitsBase 类,类如下:
此类比较简单,功能是为不同的字符类型,建立新的统一的名称。另外,这里使用到了模板特化技术。
3、定义了CSimpleStringT类,此类的功能是,在ChTraitBase定义的统一名称的基础上,提供字符串一些基本的操作功能函数。
t_bMFCDLL可无视。另外,注意,此处所操作的字符串对象,都是CStringData(前篇已述)
总述:在atlsimpstr.h中,我们发现了3个令人感兴趣的东西,CStringData 是字符串操作单元,ChTraitBase提供字符串变量统一命名服务,而CSimpStringT是一个基于CStringData字符串操作单元的简易的CString(注意,只是简易,其中并未提供我们常用的CString中的那些函数)。
【cstringt.h 都干了什么】
1、定义了 ChTraitsCRT 类,如下:
该类继承atlsimpstr.h中的 ChTraitsBase 类,然后在父类提供服务的基础上,提供一系列字符串底层操作函数。思考:为什么此处用继承?而CSimpleStringT使用提typedef?
2、定义了 _MFCDLLTraitsCheck 类,如下:
这里再一次用到了模板特化技术,该类用于检测当前使用的StringTraits是ATL定义的还是MFC定义的。(ATL定义的叫StrTraitATL,MFC定义的叫StrTraitMFC,后面会提到)
3、定义了 CStringT 类,如下:
注意了,CStringT 就是CString的真身!前面说到,CSimpStringT操作CStringData字符串操作单元,提供基本的字符串操作功能,而CStringT继承CSimpleStringT,利用StringTraits,包装更高级的功能函数。而这些更高级的功能函数,就是我们通常调用CString时所使用到的那些函数。
【atlstr.h 都干了什么】
1、定义了 CAtlStringMgr 类。(前文已述)
2、定义了 ChTraitsOS 类,如下:
和 ChTraitCRT相对应,ChTraitsOS继承atlsimpstr.h中的 ChTraitsBase 类,然后在父类提供服务的基础上,提供一系列字符串底层操作函数。
和 ChTraitCRT相比,他俩提供的函数大部相关,少数不同,另外相同函数名的实现不一定相同。
3、定义了 StrTraitATL 类,如下:
和 StrTraitMFC相对应,该类提供字符串资源管理函数和CStringData内存管理器的ATL版。
4、定义了CSTRING,如下:
【afxstr.h 都干了什么】
1、定义了 StrTraitMFC,如下:
上文已述,和StrTraitATL相对,本类提供的功能实现都封闭在MFC中。
2、定义了CString,如下:
【atlmisc.h 都干了什么】
打开atlmisc.h,可以发现此文件只不过是定义了一些结构体,定义了一个CString的简易版。因为ATL CString依赖于MFC头文件,所以,如果在使用CSTRING而又不想加入过多其它文件时,WTL CSTRING提供了一个很好的选择。
所有文件都分析后,我们发现,atl、mfc、wtl分别定义了一个CString。其中atl和mfc中的CString都是基于CStringT,只有一个地方是不同的,即CStringT所引用的StringTrait(即StrTraitsATL 还是 StrTraitMFC)。而WTL CString 的实现是独立的,是一个真正的类。另外 ,StringTrait引用的Iterator是可选的(即底层字符串操作封装)。
相关推荐
Even in ATL 3.0, there is no support for such popular features as MDI, command bars, DDX, printing, GDI, or even a port of the most beloved class in all of MFC, CString. Without these features WTL ...
自ATL 2.0版本开始,虽然ATL提供了一些简单的封装类,如`CWindow`、`CWindowImpl`和`CDialogImpl`来处理窗口相关的Win32 API调用,但相比MFC所提供的丰富的界面编程支持而言,ATL显得相对简陋。 #### WTL的发展背景...
6. **运行时依赖**:MFC通常需要动态链接库MFC42.DLL,而WTL可以减少这种依赖,甚至不需要CString也可以。 **使用WTL** 使用WTL开发时,可以通过安装的WTL SDK中的向导文件AtlApp60.awx来创建新的WTL项目。这个...
在ATL 3.0中,仍缺乏如MDI(多文档界面)、命令栏、DDX(数据对话框交换)、打印、GDI支持,甚至最受欢迎的MFC类CString的移植。因此,对于大多数MFC程序员来说,WTL并不能满足他们的需求。 WTL正是ATL团队认为窗口...
与MFC (Microsoft Foundation Classes) 相比,WTL提供了更简洁、更高效的接口来实现Windows应用程序的用户界面(UI)。 #### 二、WTL与MFC的功能对比 **1. 库依赖性** - **MFC**: 需要MFC库和CRT库。 - **WTL**: ...
3. **预处理器定义**:在VS2010中,为了确保WTL和 ATL 的兼容性,可能需要在项目的预处理器定义中添加特定宏,例如 `_ATL_NO_PROTOTYPES` 或 `_WTL_NO_CSTRING`,这取决于你使用的WTL版本。 4. **调试与调试工具**...
WTL的初衷是为了弥补ATL早期版本在窗口类功能上的不足,尽管ATL自2.0版本起就有了如CWindow、CWindowImpl和CDialogImpl等简单的窗口包装类,但与MFC(Microsoft Foundation Classes)相比,这些功能仍显得较为简陋。...
WTL中的`CString`类提供了一种类似于MFC中同名类的字符串处理方式,但在实现上更加精简和高效。`CString`支持基本的字符串操作,如连接、查找、替换等,同时也支持Unicode编码。 #### WTL图形支持 WTL还提供了图形...
WTL 是 Windows Template Library 的缩写,由微软的ATL(Active Template Library) 小组开发,主要是基于 ATL 对Win32API 的封装。从 2.0 后,功能逐步完善,成为了一个完整的支持窗口的框架(windows framework)。 ...
CString是ATL/WTL中常用的字符串类,它提供了丰富的字符串操作方法。此外,WTL还包含其他实用类,如内存管理、事件处理等。 **第十一章 动态数据交换(DDX)的WTL支持** DDX是MFC中用于在对话框控件和对话框数据...
14. MFC与ATL/WTL结合:简述如何将MFC与Active Template Library (ATL)或Windows Template Library (WTL)结合,以增强性能和灵活性。 通过学习《MFC Windows程序设计》这本书,读者将能够熟练掌握MFC库的使用,从而...
另外为了通用性以及减少依赖,代码中完全未使用CString或CAtlString,主要是MFC、ATL、WTL各自提供了自己的CString实现。 <br>版权特别声明:本软件源码完全属作者James(胡柏华)自创,作者拥有修改和变更代码...
#include <atlmfc\atlctrlsw.h> #include class MyDialog : public CDialogImpl { public: BEGIN_MSG_MAP(MyDialog) // ... END_MSG_MAP() LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, ...
WTL(Windows Template Library)的`CString`类与MFC的`CString`类似,但更轻量级。 2.4.9. CLR 及 VC 7 类 在.NET框架下,`System::String`是C++/CLI中的字符串类,提供了.NET特性的支持。 2.4.10. 字符串类的...
WTL是基于 ATL(Active Template Library)的,提供了对Windows控件、对话框、窗口类等的直接访问,为开发者提供了更简洁的接口。在创建文件对话框时,WTL提供了类似MFC(Microsoft Foundation Classes)的用法,...