wenjiang 的个人资料morning's blog照片日志列表更多 ![]() | 帮助 |
|
|
7月16日 [转帖]《WTL Makes UI Programming a Joy》 译序第一次使用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愉快!7月13日 WTL最近把一个SDK程序改写成WTL程序,大小只增加10k.在增加相当小的体积后,程序的UI部分拥有更好的面向对象性.
Windows Template Library, or WTL, is a set of classes that extend ATL to support more complex user interfaces for either applications or various UI components, while maintaining the big advantage of ATL - small and fast code. WTL classes were designed to be the best and the easiest way to implement rich Win32 based UI for ATL based applications, servers, components, and controls.
WTL provides support for implementing many user interface elements, from frame and popup windows, to MDI, standard and common controls, common dialogs, property sheets and pages, GDI objects, UI updating, scrollable windows, splitter windows, command bars, etc. The WTL classes are mostly templated and use minimal instance data and inline functions. They were not designed as a framework, so they do not force a particular application model, and can accommodate any. The classes do not use hooks or thread local storage, so they have no restrictions that those techniques impose. They also have no inter-dependencies and can be freely mixed with straight SDK code. In summary, WTL delivers very small and efficient code, very close in size and speed to SDK programs, while presenting a more logical, object oriented model to a programmer. 7月8日 完成 angelscript 的学习花了一些时间学习 angelscript,当然,学习的过程中也发现不足的.
1.多字符集的支持.由于我我经常使用多个编译器编译小东西,当然,免不了使用 MBCS 和 UNICODE的,所以给这个引擎添加了 UTF8 的支持,以及内部的字符集自动映射._MBCS编译的工程得到的是 ANSI,UNICODE 得到的是UNICODE.原理很简单.不管原脚本文件的字符编码如何,一律转成 UTF8,而引擎本身使用char作为字符的处理单位,所以,由于utf8的特性完全符合ansi的字节流特征,所以引擎内部其他一切不用修改,只需修改addon的scriptstring类改成将输入字符当作utf8处理,而根据编译的设置,将其在此转成ansi或unicode,后续的一切都按ansi或unicode自行处理,不需要关心了,_T() 宏就可以解决了.
2.添加bool的完整支持,不明白作者是怎么想的,居然bool不能与其他基础数据类型直接转化,由于不能隐性转化成bool,条件判断得多些多写许多!=0,当然对于浮点数,写起来则更加麻烦,于是我给它加上了bool的完整支持.
此外,发现
1.vc6的unicode支持相当寒碜,,字符串到整数/浮点数的转化都是先转成ansi,vc8.0则聪明很多用 .inl 的方式实现共用
2.ddk中的lib库很好用. 用 DDK 3790 编译不错1.mfc指向 mfc42.dll
2.msvcrt,msvcprt 指向 msvcrt.dll msvcp60.dll
而附带的编译器则是7.1,当然也可以将其换成其他版本,7.1版本的VC编译器质量还算不错的了
用此编译的程序可以方便的分发,不需要 msvc**.dll,因为依赖的文件系统已经自带 |
|
|