第十章 WTL 辅助类 CString, et al.
在 ATL COM AppWizard 中有一个选项是 “Support MFC.” 因为 ATL 支持基本的窗口和对话框, 这些在大多数 COM servers 中都是需要的. 然而为何每个人都需要选择这个选项呢? 只有一个原因: CString. 许多依赖于 CString 的开发者都会不惜花费在项目中引入 MFC 的代价来获得 CString. 然而在 WTL 中他们没必要这么做. ATL 小组把 MFC 的 CString 引入到了 ATL 中, 并和其它一些工具类一起在 atlmisc.h 中定义. 并且把兼容性放在了第一位来考虑, 下面对 MFC 和 WTL 中的 CString 的不同实现做个对比:
- WTL 的 CString 是写时拷贝, 就像 MFC 的一样.
- 许多 WTL 方法都有接受 CString 参数的版本, 与 MFC 一样.
- WTL 的 CString 具有 MFC 版本 CString 的所有方法, 除了少数的重载方法和 CollateNocase 之外.
- WTL 的 TrimRight 和 TrimLeft 方法仅仅剔除掉空格字符, 而 MFC 版本的则剔除所有指定的字符或字符集.
- WTL 的 Find 方法在字符串中从左往右搜寻制定字符. 而 MFC 提供了两个版本的 Find 方法, 一个与 WTL 版本的相同. 另一个则允许传递一个从 0 开始的索引来指定字符在字符串中的位置.
- 不幸的是, 两个版本的 CString 实现都使用了 CRT, 这使得在很少支持 CRT 的 ATL COM servers 中使用 CString 时会有问题.
- 对于 AllocBuffer 和 AllocBeforeWrite 方法, WTL 版本返回值为 BOOL 型而 MFC 版本则为 void 类型.
- WTL 版本的 Format 方法不支持浮点数类型, 而 MFC 的支持.
除了 CString 之外, WTL 提供了与 MFC 比较类似的一些封装类, 包括 CRect, CSize, CPoint, CFileFind(封装了 WIN32_FIND_DATA 结构), 以及 CWaitCursor. 在 WTL 中明显没有的但又是最常用的就是没有对 CURRENCY 和 DATE 的封装类. 而 MFC 的 COleCurrency 和 COleDateTime/COleDateTimeSpan 则对此有很好的支持. 你可以从以下站点下载实现了相关功能的类 http://www.sellsbrothers.com/tools
(译者注: 关于 WTL::CString 的相关解释请参阅 WTL::CString )
WTL’s support for DDX
To be continued...