也来谈谈MFC_深入浅出 MFC 第二版书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > > 深入浅出 MFC 第二版 > 也来谈谈MFC
Sonic 深入浅出 MFC 第二版 的书评 发表时间:2007-04-29 13:04:21

也来谈谈MFC

MFC: Microsoft Foundation Class,微软公司为方便程序员在Windows平台上用C/C++开发应用程序设计的一套应用程序框架。

有人说现在C/C++已经没落了,在不久的将来终将退化到现在汇编语言(Assembly)的地位,基于C++的MFC自然也不能避免被淘汰的命运。我不否认C++/MFC面对最新的基于动态语言的Web应用显得是多么的力不从心,也不否认大红大紫的Java、Perl、C#等后辈抢夺了MFC无数的风头,但是无论是出于对曾经在Win32历史上扮演过至关重要的角色的颇具神秘色彩的MFC的仰慕,还是出于希望深入理解编程语言与操作系统的交互关系的目的,抑或是为了能更有效的编写Win32应用程序,研究MFC内部运行机理都是必要的。

基于这样的目的,我开始了阅读侯俊杰先生所著的《深入浅出MFC第二版》(英文名Dissecting MFC 2nd)之旅。一个多月断断续续的研读,在合上此书最后一页的时候,竟然也有一种豁然开朗的感觉。以前也看过一本介绍MFC程序设计的书籍,不过多是以例子为主,尽管有能力编写图形界面了,不过却是知其然不知其所以然——对于通过VC向导生成的代码有好多不明所以的地方,所幸MFC的使用者只需要按部就班地修改指定的函数体就行了,其余的交给IDE(Integrated Development Environment 集成开发环境)好了——此所谓第一种层次吧。

不过VC++相比其它的RAD(Rapid Application Development 快速应用程序开发)工具(如VB)却是有着本质的不同。在VC++中,虽然使用者可以同VB一样通过IDE完成大部分的工作,但是VC++并不掩饰反应程序运行机理的代码;而在VB中程序员能看到的只有自己添加的代码。很难说那种方式一定最好吧,毕竟各有各的用户群。VB针对入门级的程序员,以简单快速的开发方式吸引大家上手;VC++则面向系统级的程序员,提供高率的编译代码以及访问底层系统属性的能力。透过VC++暴露给程序员的代码,侯俊杰先生引领读者将MFC的各项重要机制一一“剖膛破肚”。令我大开眼界的是MFC的框架竟然能在编译器不提供RTTI(运行时类型信息)支持的情况下,完成了该框架所必须的RTTI功能。MFC将Macro(宏、巨集)的功能简直发挥到了极致。尽管相较于Java、C#等面向对象领域的后起之秀来说,MFC的宏确实显得有些笨拙和缺乏可读性,但是在当时的环境之下,通过宏来实现却不得不说是一种优雅。

剖析MFC让我领略到一个应用程序框架的结构,能被成为框架而不是仅仅是类库的东西,关键在于类与类之间绝不是简单独立的关系。在框架中,类和类必须通力协作才能完成所需的功能。也就是说,我们在使用框架的时候绝对不可以像使用类库一样随心所欲——这是当然的咯,要得到框架的服务,自然要遵循人家的游戏规则。这就是很多习惯了字符环境下编程的C程序员过渡到 MFC框架下一时间难以适应的原因。我不是那种在理解了原理之后就忘记当初初试MFC的痛苦经历的人,也许正是通过不断的挫折和积累,让我在阅读《深入浅出MFC》时不断能从以前的实践中找到书中所述要点的印证,不时地得到新的理解和启示,同时也鼓励我继续地把这本书好好的研读下去。

如果必须要为C程序员做一个关于应用程序框架的恰当的比喻的话,我想可以把这个框架理解成main函数中传入命令行参数的机制:为了从命令行中获取信息,你需要定义argc, argv两个参数,OS会自动帮你填入值;同样的道理,为了捕捉鼠标事件、按钮的点击事件并设置相关函数进行处理,你自然不能越MFC的规矩办事咯。希望这个有些简陋的比喻能对挣扎在MFC一线的苦手有所帮助和启示吧。

展开全文
有用 30 无用 2

您对该书评有什么想说的?

发 表

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

对“也来谈谈MFC”的回应

杂七杂八 2011-03-05 17:02:26

话是这么说,看看MFC当年的文档视图模型,和当年Small talk里的Modle view control如出一辙,到现在做界面的也就这样吧。
————————————————————
当不然不是这样,GUI框架无论如何,java 的Swing C#的WinForm ,WPF都比MFC抽象的好很多。

Sonic 2009-09-22 10:20:10

Yeah, you're right upstairs.

iamatig 2009-09-07 13:47:39

也就是说,我们在使用框架的时候绝对可以像使用类库一样随心所欲——这是当然的咯,要得到框架的服务,自然要遵循人家的游戏规则。
////
我认为楼主此段中丢了一个要命的字,“不”字。
/////
...使用框架的...绝对“不”可以像使用类库一样随心所欲...

大文盲 2009-09-06 22:50:07

最近看一个商业游戏引擎的代码,里面有C++实现了一套反射的机制,这个东西是现在的高级语言才有的东西,感觉很牛。看了看代码全是#define,看得很晕。搜了下用C++实现反射这样的文章有人提到了这本书,说真的以前看过这本书,那是07年的事情吧,为了快速上手MFC和对MFC有点更深入的认识看的。现在回想下,那时见识少真是没看懂啊。大概看了看侯捷先生说的MFC是4.2的,想想现在都7了,也没仔细研究。现在回头看一下,才佩服微软的大牛们,MFC4.2的时候,C++还不支持RTTI呢,那些天才们,愣是用C++自己写了一套,然后再上面加了通过类名称来初始化一个类,之后用这套机制完成了对象的序列化。我们头说,能怎么样,毕竟10年前的技术了。话是这么说,看看MFC当年的文档视图模型,和当年Small talk里的Modle view control如出一辙,到现在做界面的也就这样吧。

memorybox 2009-06-08 21:13:55

尽管相较于Java、C#等面向对象领域的后起之秀来说,MFC的宏确实显得有些笨拙和缺乏可读性,但是在当时的环境之下,通过宏来实现却不得不说是一种优雅。
说得好,尽管MFC优劣众说纷纭,但只要看看在当时的条件下所实现的框架功能,这份设计思想就总有借鉴的价值。