虽然VC2010是我最爱的C++开发IDE,但是新的版本的MFC也带来非常非常多的问题,我觉得,还是用回WTL来开发WINDOWS下的程序比较好,碰到的问题基本上可以翻源代码解决,而MFC新版本中增加的类实在是太多了,没有精力去学习。

微软是个大公司,也很优秀,但是,微软公司做的一些问题却是明显把事情给搞复杂化了的,而且感觉是一些脑袋坏掉的人想出来的主意:
1. 快沦为垃圾聚集地的注册表:为什么一定要这个东东?难道东西写在硬盘中的文件里不好么。。。这个真的不能理解,只是需要统计管理么,那为什么文件不?
2. 可怕的微软MSI安装器:今天卸载WINDOWS SDK V7.1差不多完成的时候,被告知无法通过网络访问到安装文件,然后卸载失败。为什么卸载个软件都要访问网络。。。
3. VISUAL STUDIO整个结构是构架在.NET上的:苦了我们这些写C++的程序员们,安装个C++IDE还得与.NET打交道,而且还得需要快速的机器。虽然VC2010非常优秀,但是还是觉得奇怪,为什么VS2010不可以做得快一些,轻一些
4. MSN Messenger:这个东西,新版本的估计没有一个人满意吧,做得那么花哨,那么费硬盘和内存,居然要一百多兆。。。拜托,是个聊天工具呃。。
5. 让人烦的补丁提醒:当你经不住诱惑安装完成了微软提供的补丁后,恶梦就来了,那个补丁重启程序不断地、一直地提醒着你,好像你不重启世界就要末日了一样,疯了。。。
6. 为什么程序运行后,执行文件要被锁定?这样多出多少烦恼,动不动就是要重启系统以更新新安装的文件。。。

曾几何时,WTL刚出来的时候大家都会认为它是MFC的替代品,它轻快,娇小,使用C++模版对WIN32API简单一层封装,简单的消息映射,简单的一切却几乎完成了庞大的MFC的所有功能,编译出来的可执行文件超小的尺寸,良好的运行速度让当时的使用者惊叹不已。可是,微软却没有继续支持这个项目,除了ATL3.0是免费的之外,新版本的ATL都是需要收费,这也造成了开发者除了继续使用ATL3.0外无法在免费的基础上使用WTL来进行项目开发了。

其实微软的MFC还是不错的,非常多的程序使用VC6这个经典版本的MFC来做项目开发,再加上VC6的支持库在WINDOWS的系统上已经自带,这也使得开发着直接使用DYNAMIC LINK的程序不需要额外的支持就可以顺利运行在WINDOWS的系统中。但是时代是要变迁,工具还是要继续升级和更新,自新版本的VISUAL STUDIO出来之后,MFC也随着新版本更新换代,但是因为某种原因,WINDOWS操作系统中不再绑定MFC的动态链接库,这也造成了MFC的程序要么静态链接,要么带上个一两兆的动态链接库来发布,这个尺寸就直接变大了起来。当然,其实尺寸在现在的电脑中真的已经不是非常重要了,一两兆的程序对于普通用户来说,也是可以接受得了的。但是,程序员们总是有着这样那样的癖好,对自己的程序精益求精,对程序尺寸精益求精,为少花钱而努力奋斗着,于是用WTL来满足精益求精的程序员们是再合适不过。

其实这样的比较对MFC是多么的不公平,因为MFC诞生的时候,C++标准还没有像现在这么完善,当时的C++是不支持模版编程的,对于只支持多态,继承和宏的C++,能够做出MFC这样的优秀的类库来,也是非常了不起的,虽然在同一时候,BORLAND的OWL可能才是当时最好的C++模版库,可惜它却被微软用不正当的手段打败了。而在C++支持模版后,通过ATL发展出来的WTL终于粉碎了C++模版不适用于写界面程序的谣言,这也在程序界中被称为微软做得最好的一个类库,可惜,该死的微软居然不好好发展这个库,现在只由Nenad Stefanovic(WTL的发明者)一个人在SourceForge上维护。

MFC自从VS2008 SP1的版本后发生了一件现在看来很糟糕的事情,就是加入了BCGCONTROL的一些控件为了支持新的OFFICE 2007的RIBBON以及一些DRAG DOCK的功能。为什么说是很糟糕的事情,因为这一套新加入的BCGCONTROL的类库有很多BUG,而且造成了编译出来的程序的尺寸的剧烈增长,而DYNAMIC LINK的MFC动态链接文件已经需要4.2M的大小。设想,我要做一个简单的小程序,我希望完成一些简单的功能,但是程序却要背着一个4.2M的动态链接库到处跑,甚至这个超大的动态链接库里我的程序真正需要的东西可能才几百K,这是多么不可能让人接受的事情!难怪看到有人在MS的VISUAL STUDIO的BLOG上留言说为什么要加那么些个无用的东西,并不是人人都需要这些东西,而现在却需要到处背着垃圾跑了。好吧,其实我不得不承认,MFC刚刚加入这些新的类库的时候,我可是着实兴奋了一段时间,“我可以用它来开发RIBBON的程序了,我可以轻松的写出DRAG DOCK的界面来了”,这些声音在我脑海里回荡了好长一段时间,直到现在看清楚了自己真正需要些什么的时候,才开始觉得,微软实在是太懒得更新C++了,连类库都没舍得买个好点的。

MFC还是WTL,写到这里,还是没看明白吧。其实我自己也是经常徘徊在这两者之间,一方面,MFC是微软官方维护的东西,一方面,WTL确实优秀轻小;一方面,到了VISUAL STUDIO 2010后,MFC的CLASS WIZARD回来了(虽然还是有一些BUG),开发轻松不少,另一方面,WTL写的原生WINDOWS界面(现在在WINDOWS VISTA/7下已经支持原生的RIBBON界面)其实还是要比BCGCONTROL的RIBBON界面经得看得多,虽然没有CLASS WIZARD,虽然要多费点手工,而且,DRAG DOCK我真的需要么。最终,思前想后的还是觉得WTL比较合适我现在的开发,毕竟简单,先进,快速,不带任何一点多余的东西以及WINDOWS原生界面,不需要太长的学习时间,虽然开发起来手指有些累。关于MFC,说实话的确有一些让人失望,新的版本实在是太粗糙了。