MFC编程点滴系列1-MFC起源与简介

这几天空闲时在看一本书,叫MFC Black Book。

MFC的书看得很多了,看到这本书还是被它的名字所吸引。

书比较老了(97年的),笔者用的还是VC5老古董,但是书中有些地方还是比较有意思的。书的目标读者是中级到高级的MFC编程人员。其实大家都可以看看,它讲了一些MFC的实现原理和怎样绕过MFC的束缚,对于一个MFC程序员,还是有价值的。

于是,我想根据自己的经验并结合这本书的内容,写一个MFC编程点滴系列。把我认为值得借鉴的一些经验与大家分享。当MFC势态日微时希望能引起某些同好的共鸣。


MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在Windows环境下编写C++应用程序的一个框架。是的,MFC只是Windows API的一个thin wrapper。相对于非面向对象的API来说,MFC是早期Windows桌面程序RAD的利器。从上世纪90年代初开始,MFC就开始为MS服役了,当时编程语言还是C, Pascal, Cobol, Fortran的天下。直到C++98前,作为面向对象的C++语言还没有一个公认的标准,这就是为什么老版本的MFC里有很多Microsoft Specific的原因,很多MFC的设计和实现被人诟病,其中很大的原因是因为MFC诞生在C++确立标准以前,可以说大部分是历史遗留问题。再回到上世纪90年代初,当时提起Borland公司可是鼎鼎大名,它的Borland C++中集成了OWL(Object Windows Library),曾经风光无限。这个OWL就是MFC当时最大的竞争对手。但MS就是MS,怎能允许另一家公司的编程语言在自己的地盘上撒野,于是1992年推出了MFC,当时还是DOS版的。但是直到1995年,MFC与Visual C++一直是处于追赶的角色,直到1998年VC6(MFC6.0)全胜。Borland从1999年停止了OWL开发。之后Borland又以Delphi和JBuilder窜红,但是人员被挖,经营状况不佳,产品更新跟不上,逐渐在编程语言领域丧失了优势,现在打开Borlan的主页,公司的标语是“Improving the Software Delivery Process Through Open ALM”,呵呵。MS always plays hard ball.

想想现在Java在Windows平台受到C#强有力挑战,Sun又因巨亏已被Oracle收购,Sun会不会步Borland的后尘?其实,编程语言,只是个工具,工具的好坏,还要看做工具的人。

再回到MFC诞生之前,当OOP与C++开始盛行,当Borland大红大紫,MS需要一个“先进”的东东,击败竞争对手,同时走在技术前沿。所以当Microsoft Foundation Classes这个东东出现的时候,程序员看到了一个先进的、OOP的工具,而Borland看到了一个强有力的竞争对手。

我一直觉得MFC应该是一帮绝顶聪明的人做的,因为Bill不会让平庸的人去做任何关于Microsoft Foundation的东东,哪怕是一根螺钉。

接下来,VC6以后的事情,有兴趣的TX可以看看我的前一篇博文“MFC死了吗?

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

下面这几个问题来自MFC Black Book,有兴趣的MFC程序员可以看看自己能不能解答?

1. 一个MFC程序必须具备的类是什么?

2. 怎样手动建立一个Message Map?

3. 怎样向一个Document关联其它View?

4. 为什么CRect不是从CObject派生的?

5. 知道CCmdTarget这个类是干什么用的吗?知道有那些类从它派生?

6. 知道一个MDI程序得到某个消息后,消息的传递是什么顺序吗?

 

本节完。

下节预告“MFC的消息机制”

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值