如何学习mfc

mfc就是Microsoft Foundation Classes微软基础类库的简称,用于开发windows软件的,很多人学习了c或是c++之后,要准备放弃黑白屏的字符的程序,准备开发拥有窗口界面的程序,那么是使用c语言还是c++,或者说使用SDK还是使用MFC进行开发的问题,摆在了大家面前,另外,应该如何学习MFC的问题,也摆在了面前,因为MFC底层相当复杂,而且相对隐蔽,我们学起来,常常摸不着头脑。今天,我根据我的经验,谈谈这些问题。

首先,如果我们是使用c语言,那么我们就使用SDK来开发,这种开发就是直接调用API函数的开发,也是我们常常听说的,使用面向过程的开发方式,使用SDK的开发方式,工作量比较大,因为几乎所有的代码都要我们自己编写,而且由于是面向过程的,当代码过多之后,维护起来相当困难,程序逻辑也更加复杂。如果我们是使用c++语言来开发,那么我们就要用到MFC,MFC是面对象的编写方式,因为每个模块可以用对象的方式来管理,因此,我们只要抓住了各个对象,以对象为基本点,我们维护起来更加容易,程序结构更加清晰,而且大部分代码在mfc的类库中,微软已经为我们写好了。所以我们在没有特殊要求的情况下,我们就可以直接用,如果我们要对创建的对象有特殊的要求,我们可以通过重写虚函数,拦截一些消息,并处理的方法来实现。那么SDK和MFC有什么联系吗,可以说是相互离不开。为什么呢,这就要说到MFC的由来,MFC其实是SDK的封装,也许说这个你不知道,但是我说,c++就是c的封装,也许你就明白了,在c的封装的基础之上,引入了类,对象的概念,从而有了类的继承,多态性等概念,其实底层完全就是c的执行,那么SDK和MFC的关系也是这样,MFC的底层其实就是SDK,只是再次基础上,搭建了一个框架,也就是MFC,在这个框架之上,我们来进行开发,所以说,要学明白,就要学明白SDK,也许你不用精通SDK,但是你要会SDK。为什么呢,一方面,MFC不能完全完成我们需要的任务,虽然它对大部分sdk进行了封装,但是有的也没有的,这时候,我们就要我们直接调用sdk函数,例如,在我们自定义的类中,我们肯定要用到sdk,另一方面,我们可以更加灵活的使用MFC,有时候不用受框架的限制,或者说可以巧用MFC。举个例子吧,对于私有消息,或者有些消息,MFC的消息映射当中,并没有这个,MFC的映射消息,一般都是针对窗口消息,有的消息,如IME的消息,就没有,那么我们应该如何处理呢,对于私有消息,MFC为我们准备了一个宏OnMessage,那么像我说的IME的消息,如何弄呢,其实这个时候,我们就可以重写虚函数,WindowProc,在这个虚函数的编写过程,就和SDK的编写消息处理的过程是完全一样的,使用switch,case语句,就可以搞定了。所以,MFC和SDK,没有可选性,SDK是基础,MFC是目标。我想现在大家应该明白了。

接着,我要说是如何学习MFC,这也是摆在很多刚刚接触窗口化程序编写爱好者面前的问题。在这里我也通过我的经历谈谈,因为我是完全自学过来的。一开始呢,我们也许第一个想到的是,找到一本学习书,先入个门。于是就到处咨询一样,买什么书好,ok,最后买了一本书,加上点视频教程,开始学起来了,看着视频的作者的讲解是行云流水,编写是信手拈来,可是,把这些东西,放开,让自己打开编译器,准备写自己的第一个程序的时候,发现无从下手了,到处都是代码,我应该将我自己的代码放到什么位置呢,好吧,你有回去看着视频,心想,先照着视频做,ok,关了视频,继续刚才不知如何下手的程序,发现,还是不行,就是照葫芦画瓢也困难。这个时候,也许有人放弃,有的人还在苦苦的支撑。其实,这里主要是方法的问题。比如,有的人片面的说,windows编程就是调用API,ok,有人就去找讲API的书了,发现,看不懂,太难了,呵呵。那么我要说是,学习MFC编程应该从windows机制与MFC框架入手,就像搭建房子一样,我们把框架搭起来了,剩下的工作就是让它变得丰满,那么你想要什么程序,按照windows的处理机制和MFC框架,就知道该如何写程序,在那里添加代码,在那里我应该重写虚函数,程序就逐渐丰满起来了。

我想初学MFC的人,应该也看了几本书了,但是自己进入MFC以后,不说MFC底层,就是通过向导生成的很多函数,宏,执行结构,自己也看不明白是什么,我看过一本好像叫《vc++2010权威开发指南》的书,这本书有800页左右,16开的哦,也没有把MFC的结构和原理说明白,它的主要内容是一些基本编写方法,如菜单,按钮,简单图形编程。每个部分都说的十分的简单的情况下,就用了800页,因此,我要在次说的是,学习MFC,我们不能追求靠几本中文就把MFC学会了的,那么我要说的就是,学习软件开发的程序编写,我们必须要实现以MSDN为主,中文参考书为辅的思想。要学会使用MSDN,才能从根本上解决学习SDK和MFC编程的问题。在后面的文章中,我会谈谈如何使用MSDN。

接着,我再谈谈学习路线,首先呢,我们不要急于写出什么功能的程序,我们应该主要攻击Windows的程序运行的机制,例如,我们编写一个窗口,就有设计窗口,注册窗口,创建窗口,消息循环,窗口过程。这是一个最简单windows程序的基本结构,把它弄清楚,不管是SDK还是MFC,你就可以打下了很好的基础。有了这个基础,对于建立诸如按钮,编辑框,列表框等控件,都可以自己搞定,不要谁教你。接着,你可以学习有关线程和进程的知识,绘图与绘画(painting and drawing),COM(组件对象模型)等,那么到目前为止,你就可以自己独立的学习如何进行windows编程,因为剩下的就是功能型编程了,编写出你想要的功能,会设计到各个模块,那么这样的技术资料从哪里来呢,就从MSDN来,比如,你要进行音频视频开发,那么你可以查看MSDN上有关directshow或是Media Foundation的查看,在MSDN上会有完整的资料和代码供你参考,例如Media Foundation会为你编写了一个基本的播放器的框架,别的如音量控制,视频控制,就你自己添加。那么,对于MFC呢,本段前面说的,基本都是SDK的,我也提到,SDK是MFC的基础,所以你学会了SDK的方法,那么你就可以在繁杂的MFC中找到切入点,添加你自己的代码。在MFC之外,我们还要学习一些SDK上面没有的东西,也是我们必须学习的,就是MFC框架,但是我们也要清楚,这个框架也是基于SDK的,比如说,SDK中我们设计窗口,注册窗口,创建窗口,消息循环,窗口过程,分别就对应了MFC当中InitApplication ,InitInstance,run,消息响应函数。这些都是在MFC底层的,如果我们要干涩,我们可以重写响应的虚函数,或是截获一些消息,如在窗口创建之前,有一个函数PreCreateWindow,通过它我们就可以对MFC设计的默认窗口类进行修改,和我们在SDK中设计窗口类一样的。

知识在我们学习过程当中呢,是不断积累的,不可能一次性学完。关键是提升自己自学的能力,所谓边学边用。这里我要特别说说MSDN,我们不用再苦苦的寻找别的中文书,MSDN就是我们的不仅是我们的字典,我们查找我们使用的函数的使用方法,而且还是一部学习资料,因为里面有你程序组件开发各种资料,里面不仅告诉你如何开发,还有代码片段,有的甚至直接为你写好了框架,你直接添加功能。这里我可以做一个比喻,学习编程就像我们以前学习英语一样,在中学的时候,我们几乎把所有的语法都学习完了,那么,我们还是很难写一些好的文章,但是到了大学,我们就是培养这种能力,我们更多就是自学,拿着字典。在英语语法的框架下,我们查询字典,就可以写出文章来。同样,对于学习编程一样,我们学习语言,如c或是c++,就是学习编程的语法,之后我们要开发出各种实用的程序来,那么msdn就像我们学习英语的字典。我想有人教你英语语法,没有人会拿着字典叫你这本字典的每个单词吧,同样,编程也是这样,也不会有人把所有的msdn给你讲完,关键是你要学会如何使用“字典”,我们要培养发现问题和解决问题的能力,我在一些vc++学习群里面,总是常常有一些人问一些很简单的问题,其实这样的问题在msdn中就很明了的说明了。那么,在下一篇文章中,我就会说明一下msdn的结构及使用方法。

最后,提醒大家,学习不要急躁,从最简单的入手,循序渐进,冰冻三尺非一日之寒。你想要的,都在MSDN。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值