|
Table of Contents
|
我要重复制造轮子吗?
不是。如果有的选择,我不会开始WINX。在决定做WINX前,我主要考察了MFC、VCL (Delphi/C++ Builder)、WTL等等。
Why not MFC?
从现实的情况来看,MFC是C++界面库中的老大。你接触的所有用C++编写界面的软件当作中,你几乎很少可以看到非MFC写的程序。不过,在我看来,这主要归功于Microsoft这个了不起的公司。如果换另外任何一家编译器供应商去推动这个产品,它的命运会完全不同。
在我看来,MFC中有很多工具类是很不错的,但是对于MFC的框架,我一直不敢恭维。不选择MFC的理由,是因为MFC框架是“臃肿”的,是“强耦合1”的。
Why not WTL?
WTL是Microsoft非官方支持的一套基于ATL之上的界面库,已经开源。
WTL最接近我所期望的界面库的样子。是的,我最终选择了WTL。那么,为什么还会有WINX呢?
- WTL是一个精巧的界面库,构架非常灵活。但是WTL的使用有点啰嗦(不是很大的问题),不及MFC简洁,容易让初学者畏惧。WINX继承了WTL的精巧,并在使用的简便上进行了新的尝试,其使用甚至比MFC更为简洁。
- WTL重点一直在精巧上,在可视化编程方面重视不够。WINX从一开始就定位为尽量向可视化方向发展。尽管目前WINX没有象MFC一样,有专门的可视化开发环境2,但是哪怕只是使用Visual Studio,你也一样可以进行简单的可视化开发。
- WINX引入了属性概念(考虑到性能,和Delphi的属性实现上不太一样,只是借用了这个概念),进一步将界面的可视化开发进行到底。Delphi/VCL是优雅的,因为它提供了一套相当完备的界面开发解决方案。我在实现WINX的时候,一直有一个目标,就是希望有一天WINX也可以象Delphi那样非常方便地进行界面开发。
在实现上,WINX并不排斥WTL,它重用了WTL的大部分代码。但是,如上所述,两个窗口库的理念是有很明显的差异,对用户来说使用方式很不一样。而且,WINX的窗口机制完全区别于WTL,因此不能认为WINX是WTL的扩展,而只能说WINX重用的WTL的实现代码。
Why not VCL(Delphi/C++ Builder) or Else?
那么,我为什么不使用VCL/Delphi呢?嗯,因为我是C++开发人员,不是Delphi的fans(C++ Builder从功能上来说还不错,但是由于IDE以及Borland本身的一些策略问题,C++ Builder有逐渐淡出舞台的趋势),呵呵。另一个至关重要的因素,是Delphi编译出来的东西显得有些臃肿了。





