第一次使用C++是1993年。
当时我主要的工作是PC虚拟仪器开发,环境是DOS,因为要操作硬件以及运行效率的原因,除了汇编,使用最多的是C语言。我正需要开发一套仿真Windows图形界面的函数库,用C简直是一场恶梦。好在在毕业后不久,因为当时导师在各处宣传Borland的C++集成开发环境,我得以有机会学习并使用它。
为了免除海量代码的折磨,边学边做地用C++做了一套框架,象极了当时对于我们PC286族只是作为玩具的Windows 3.1。我叫它W4D(Windows For Dos)。现在翻箱倒柜也只找到了当时打印的代码片断,大概不到4000行代码,在一叠已经泛黄的带孔的打印纸上。
记忆中,我靠这套框架曾换取了好多次面试时的印象分。
后来的几年中,我做得最多得是MIS,所以VB、Delphi和Power builder成了我的主业。特别喜欢Power builder的可视化继承,觉得那才是真正的OOP (Object-Oriented Programming,面向对象的编程)的实现。
我特别不喜欢拷贝和粘贴,不喜欢将同样的代码写两次,所以我喜欢C++中的模板技术(Template)。这也是VB、Delphi和Power builder包括后来的Java所不能支持的。
我也不喜欢为了发布一个小小的应用程序,需要带上一大堆的支持库,所以我一直用C/C++写一些小程序。但是由于开发图形界面的复杂,大多为Console-Based程序。而这世上所有的C++版本的Windows应用开发框架中,以使用WTL(Windows Template Library)开发出的程序为最小。(当然,用Borland的Delphi、C++ Builder也可以开发出免支持库的应用程序,但是这些工具实在是太昂贵了!)
WTL是微软的ATL小组中以Nenad Stefanovic为首的工程师们在为ATL开发窗口相关API的封装类库时开发的副产品。最早作为一个不包含官方支持服务的软件包出现在2000年1月发表的微软平台软件开发工具包(Platform SDK)中,当时是3.1版。目前最新的WTL7.0版可以从微软的MSDN网站(http://msdn.microsoft.com)上免费下载。
喜欢WTL是因为它的小巧,不需要任何支持库,编译出的运行代码是静态编译MFC程序的十分之一。
喜欢WTL是因为它的开放,所以的源代码都尽在掌握。并且不似MFC那样的庞大。
喜欢WTL是因为它的廉价,可以免费获取,经过修改ATL可以使用免费的标准C++编译器编译。
喜欢WTL是因为模板技术,WTL是目前唯一一种不但不排斥而且充分利用了模板技术的Windows应用开发框架(Windows Frameworks)。
……
也许,你会有更多的理由去喜欢它。但是学习WTL最大的苦恼莫过于没有微软官方的支持和少得可怜的学习资料。
我有幸从网上获得这份白皮书的英文版《WTL Makes UI Programming a Joy》,并且得到作者Nenad Stefanovic先生的许可来翻译它的中文版。
在按照原文翻译的同时,我增加了一些实践的经验总结嵌入在译文中的【恒瑞译注】中,并增加了一个附录,为我使用Borland免费的C++编译器来编译WTL程序的经验分享,以帮助读者在轻松掌握这门技术的同时尽可能廉价地搭建开发环境。
原作分为Part1和Part2两个文件,我在翻译的同时整合为一个完整的文件。
本书分为两个部分:基础篇和提高篇。
在【基础篇】中,作者从使用WTL的祖先ATL创建一个Windows应用程序开始逐步引入主题-WTL的使用。内容包括:
Ø 窗口和工具条的创建
Ø 各类视图窗口使用
Ø 文档列表的显示和维护
Ø 开发单文档(SDI)程序
Ø 开发象浏览器那样的多重SDI程序
Ø 开发多文档(MDI)程序
Ø 封装图形设备接口GDI
Ø Cstring仿真和其它MFC习惯仿真
在【提高篇】中,作者通过许多样例程序片断,引导读者使用WTL技术开发最流行的Windows图形界面要素。内容包括:
Ø 创建包含位图的视图
Ø 创建和使用上下文菜单(鼠标右键菜单)
Ø 创建可以卷滚的视图
Ø 调用系统通用对话框
Ø 各种控件封装类
Ø 打印和打印预览
Ø 创建和使用属性页(Properties Sheets)
Ø 消息过滤和映射技术
Ø 闲置(Idle)时间处理
Ø 图形界面更新
全书的风格统一,都是通过对一些样例程序代码片段来阐述实现机制。建议读者一边调试一边阅读。一方面是实践帮助记忆,另一方面也能在调试过程中举一反三,有一些小小的成就感,保持学习热情。
毕竟这不是可视化编程的教程,写代码永远没有画界面来得轻松。但是,乐趣和成就感还是代码给予的比较多些。
最后,预祝大家阅读愉快,调试愉快,使用WTL愉快!