MFC,是一个英文简写,全称为 Microsoft Foundation Class Library,中文翻译为微软基础类库。它是微软开发的一套C++类库,是面向对象的函数库。
微软开发它,是为了给程序员提供方便,减少程序员的工作量。如果没有MFC的话,那么,早期的Windows程序员就必须要采用Windows API来开发程序了。
采用Windows API,可以开发出运行效率较高的程序来。运行的效率,可以高于用MFC开发的程序。然而,全靠Windows API的话,那么,许多的重复性的工作,它的工作量大概就会比较大了。
有了MFC,程序员可以减少许多的重复性的工作量,加快开发效率。
然而,在当今时代,似乎,单论开发效率的话,那么,有好多的流行的框架,似乎开发效率都会好于MFC。比如Qt,比如Java,C#,Python,Go语言等等,开发效率都很高。
如果为了让自己的开发效率高一些,那么,MFC似乎不是大家来学习它的理由。
在软件开发方面,其实,开发效率高并不代表着软件的运行效率高。在Windows平台上,除了Windows API的运行效率可以比MFC高一些之外,其他的东西,基本上,运行效率都是慢于MFC的。Qt,它可以搭配着C++,所以,Qt的运行效率可以很高。但是,它和微软官方的类库MFC相比,毕竟还是要慢一些的。C#,Java,这俩的速度,跟用C++的Qt与MFC根本上就不在一个数量级上,C#和Java的运行效率要比MFC与Qt慢的多。
在运行效率方面,在Windows平台里面,最高的,是Windows API。其次,就是MFC与Qt。而MFC在Windows的运行效率要高于Qt。
MFC还有一个很好的优势,是什么呢?MFC可以和Windows API无缝对接。这一点,Qt是比不了MFC的。
大体上,可以认为,有了Windows API和MFC,我们可以在Windows平台上,畅通无阻。而Qt的话,它作为一个框架,有的时候,它也会有它的局限。如果你所需要的功能 ,Qt提供了,那还好。如果Qt未能够提供,你要咋办呢?
MFC是一个比较丰富的类库,然而,它也和Qt一样,本身还是功能有限。然而,MFC可以和Windows API无缝对接。有了MFC和Windows API的联手,那么,即使MFC未能够提供某方面的功能,那么,我们也可以结合着Windows API,自己来实现相应的功能。Windows API与MFC的联手,可以使我们在Windows平台上,自由驰骋,自由地发挥自己的才能,以开发我们想要开发的软件。
MFC的开发效率,相比于Windows API,它是高了一些。而相比于流行的Qt,C#等等的东西,开发效率是慢了一些的。然而,它运行效率高。
MFC,它是一个学习难度比较高的东西。它的内容还很多。想要学习好这一门科目,那么,你可以事先准备好瘦身,因为,学习它,的确是需要耗费一些个体力与脑力的,而且,学习它也会比较耗费时间。
为啥难度高?因为专业。因为,同样的一些个功能,Qt,C#等等,已经是帮助我们封装好了相应的功能,不需要我们自己去操心了。而在MFC里面,好多的东西,我们还是需要自己去做。这样一来,为了实现同样的功能,大概,用MFC的话,代码量会多了一些。但是呢,由于我们的参与度高了,所以,我们更可以在学习MFC的过程中,学习到Windows编程的专业性的知识。
选择开发工具的时候,开发效率,运行效率,都可以是我们考虑的因素。当然了,学习难度也可以是我们可以去考虑的因素。如果你打算学习一个非常专业,运行效率高,可以自由发挥你的编程才能而不必忍受着本身框架的功能缺失的局限,具备着强大的面向对象的特色的框架,那么,MFC会是非常适合你的一款编程框架类库。
MFC,它当然有它的缺陷。在我去学习MFC的时候,我听到的一个话语,那就是,MFC,谐音为【没饭吃】,mei fan chi。
这一点,的确是许多程序员不去学习MFC的理由吧。
虽然它不火,但是作为微软的王牌的面向对象的编程框架,我们有理由相信,微软不倒,MFC就依然会是一个好的编程框架。至少,微软程序员会用它来编程。微软作为一家大型跨国企业,用它的,会少吗?
如果你能够学习好MFC,并且学得非常好,还进了微软,那么,你与周边的程序员,可能工资级别就不一样了,地位,可能也会不一样了。
MFC学习起来有难度,我自己,最近是刚刚学完了Jeff Prosise的第二版MFC教材,就是下图所示的这个教材。
学习这本书,让我受益匪浅。当然了,学习的时候,压力也是很大的。在学习MFC或者是Windows API的时候,有一些个难点知识。像是映射模式,坐标系,窗口原点与视口原点,这样的知识,我认为,这就是很难的一块知识。
MFC之所以热度低,乃至于说,佩措尔德先生的第五版Windows教材会热度低,那么,我认为就是与这些个难点知识有关。
对于今天的程序设计学习者来讲,想要克服MFC与Windows API这俩科目,应该会是需要一番努力的。
我认为,想要学习好程序设计的知识,Windows API与MFC,是需要克服的两个科目。想要成为高水平的,高端的程序员,那么,一个十分重要的因素,一定是说,你的程序的运行效率高。
想要让程序的运行效率高,一方面是算法,另一方面,是所选择的编程框架。如果说,十分类似的一段代码,使用C#的效率,会慢于MFC,那么,你可以相信,如果能够学习好MFC,那么,你的程序质量,应该会得到有效的提升的。
程序员有35岁危机。如果,能够将Windows API与MFC学得好,学得精,那么,35岁危机,也就自然度过了。
在这里,我开启本专栏,是打算写下我对于MFC的理解。写作的内容,应该是以Jeff Prosise先生的教材为蓝本的。很多的内容,甚至还有可能是照抄的。然而,我所写的东西,仍然会与Jeff先生有一些差别。
接下来,我来说说本专栏的一些个特点。
第一点,Jeff先生写作的时候,是用Visual C++ 6.0作为演示平台的。而我这里,所采用的编程平台,是Visual Studio 2010 和 Visual Studio 2019,以 VS 2019 为主。这么两个软件平台,相信,对于你的学习,应该是会有帮助的。
第二点,我会添加许多的程序案例。在Jeff先生那里,很多的知识点,他是讲解得比较详细的。然而,我认为,如果是编写一个面向初学者的教材的话,那么,应该多一些普通的程序案例演示,而不是讲了好多好多的基础知识,然后突然来一个篇幅很大的东西。
第三点,对于一些个难点知识,我会讲解得更加详细。这一点,到时候,大家会对我本人的讲课风格,有所体会的。
第四点,如果将我所讲解的内容展开为一本书的话,那么,有可能,我所写的内容的字数,书页的厚度,可能会是Jeff先生的两到三倍。那么,你阅读我写的内容,你大概也需要花费比阅读Jeff先生的教材更多的时间。如果,你缺乏学习长篇技术教材的耐心的话,那么,我所写的内容,可能你是学不下来的
第五点,原书的一些个有难度的代码,我依然会予以保留。我自己写博客的时候,我当然会为了方便初学者,而去多写一些个基础案例。然而,想要学习好MFC,学习好Windows API知识,仅有一些个简单的案例是不行的。有难度的代码,你依然是需要去学习的,并且也需要你尽力地克服这些个难点知识。
本专栏的写作目的,一来,是巩固我自己的所学。二来,是为培养一批高端程序员。
在国内,很多的专业的人才状况都面临着相似的情况。中低端的人才多,高端人才紧缺。
在这里,对于像是Windows API与MFC这样的有难度的知识,它的确是有着相当的难度,有可能,会有许多人,学到某一块的时候,怎么也学不好。这个,是有可能的。但是呢,国内的985与211高校的本科生与研究生,应该还是不少的。如果,你能够凭借自己的能力,考进这样的名校,那么,或许,Windows API 与MFC 这样的有难度的编程知识,你可以去挑战一下,以成就自身。
如果你是普通的一本,二本三本,乃至于专科院校的学生,那么,如果你有兴趣来挑战一下MFC与Windows API 的知识的话,并且,你学好了这两科,那么,你也就可以自信地说,你的编程能力,已经是超过了许多的大学生了,甚至是超越了许多的985与211院校的学生了。
因为,MFC与Windows API知识,这种有难度,每一本书是1000多页的大书,不是每一个人都有耐心去学习完这样的东西的。学一个Java,C#,学完以后,去找工作,去赚钱,那不也是很香的吗?如果你本身是普通大学的学生,然后呢,你还有兴趣去挑战一下MFC与Windows API这样的有难度的编程科目,并且呢,你还学好了,你坚持下来了,那么,你当然在技术上,就会更加地具备竞争力。
就我本人来讲,我希望通过本专栏的教学,来培养一批高端程序员,而不是中低端的程序员。同时,我也希望,本专栏,可以成为一个高质量的专栏。