昨天晚上把 MFC 8.0 和 MFC 9.0 对比了一下,从最后的结果来看,这样的一个大版本升级,相当名不符实。不过事实是,从 MFC 4.2 之后的版本,其变化就一直很小。
相对于 MFC 8.0,9.0 的变化有:
1、新增了几个系统控件和公用控件的封装类(如 CSplitButton 和 CPagerCtrl)
2、对原有的系统控件/公用控件/公用对话框封装类进行了更新,以包含 Windows XP/2003/Vista 以来的一系列原生性的增强(如 CTreeCtrl),变化以 CFileDialog 为最。
3、对框架窗口使用主菜单的行为作了增强。其必要性有可能和 Vista 下弱化主菜单的功能的趋势有关。
4、彻底去除了和 Windows 9x 相关的代码。这实际上是一个收尾工作,MFC 8.0 就已经不能在 Windows 95 下运行。
5、对大量的函数原型中参数及返回值的专用修饰符做了更新。这其实和类库的使用者关系不大,那些修饰符的作用在于让调试器更清楚地知道参数/返回值的正确值或者形态,以便于发出警告。
MFC 在之前的版本就和 ATL 的代码杂糅到了一起,所以也顺便提几个 ATL 的变化。其一是 ATL 不再支持最小化 CRT 的使用(即 _ATL_MIN_CRT 宏),其二是不允许以非安全方式编译(即原来的 _SECURE_ATL 宏成了默认行为,而且不再对此宏进行否定性的支持)。
另外,老汉不太赞同有很多人在网上所说的 MFC 已经没落之类的说法,只是随着时间的推移,MFC 的研究已经到达了一定的程度,其内部的构造已经被无数次地解构,对于很多人来说没有了新鲜感和神秘感而已。如此庞大的框架类库,在使用了这么长的时间之后,仍然能在作出轻微的修改就足以跟得上系统内日新月异的变化,正从另一个侧面反映出这个类库极为优秀的架构设计和强劲的生命力。在这个电子世界里,长期保持稳定的东西就会遭到人的忘却似乎已经成了一种规律,并不是 MFC 独然。