如何学习MFC

如何学习MFC,第1张

我非常理解你。因为基本上你的问题我在学MFC的时候都遇到过的。

我学建筑的,没有课程安排学VC。只是个人兴趣,没想到自己编程方面还是比较有兴趣(有点天赋),2010年毕业就来中关村编程。现在感觉还不错,学 了很多东西。总之,这个编程就是设计思想很重要,一个好的程序员可以在2分钟之内编号一个功能,但是她绝对可以花10倍的时间去调试。因为只有这样才可以检视程序内部是如何执行的。无论什么语言,其内建的运算符、函数等的都是语言上比较低级的东西,程序员的大部分时间都花在如何设计和抽象自己的类,之后建立面向对象编程上面。

既然这样,并且基于微软系统的盛行和垄断地位我们编写就要用MFC类库就要使用MFC编程框架。所以虽然MFC起步很难学,有点捉摸不透。但是还是要硬着头皮学下去,(只要你想学好编程的话,或者将来想从事与之相关的工作)。

我认为最好方法就是:

1、查看MSDN的习惯。(很强大,很多新手都不注重,其实记住所有的东西很困难,我师傅做了编程7年了很多时候,要较真的时候还是要查看MSDN,我认为养成个这个良好的习惯是受益终生的起码对于编程者来说)。

2、千万不要期望记住所有的东西,因为有VA助手(详情百度VA)。编程高版的VC2002,2005,2008等里面已经集成了VA,所以不用单独安装。但是很多的还是习惯用VC6,我们公司就是。所以安装VA1561版本是最佳选择(网上有破解免费的)。可以体验一下啊。极大的方便程序编写。函数等的只要记住大概的KWord即可。

3、最后就是看MFC编程实例,有很多好的网站。这个东西点滴积累的。很多的东西看懂之后,重要函数(一个程序中的关键段和关键函数)去查下MSDN,之后自己在编写一个类似的或者直接的在原基础之上改,就回进步很快,记得很牢。有一天你会发现,你记住的函数已经很多了。看一般的MFC程序都可以流畅的看下来。那种成就感尤其对于编程新手来说,是无法用语言表达的。

最后,祝你好运!

MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。

封装

构成MFC框架的是MFC类库。MFC类库是C++类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。

(1)对Win32应用程序编程接口的封装

用一个C++ Object来包装一个Windows Object。例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。

(2)对应用程序概念的封装

使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。MFC把许多类似的处理封装起来,替程序员完成这些工作。另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。文档是用户 *** 作的数据对象,视图是数据 *** 作的窗口,用户通过它处理、查看数据。

(3)对COM/OLE特性的封装

OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现OLE的更高级接口。

(4)对ODBC功能的封装

以少量的能提供与ODBC之间更高级接口的C++类,封装了ODBC API的大量的复杂的工作,提供了一种数据库编程模式。

继承

首先,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。这些类中,最重要的类是CObject和CCmdTarget。CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。

针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd;应用程序对象,基类是CwinThread;文档对象,基类是Cdocument,等等。

程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的。

虚拟函数和动态约束

MFC以“C++”为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。例如,CWnd封装 Windows窗口对象时,每一条Windows消息对应一个成员函数,这些成员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。

这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程序的代码。本书将充分的展示MFC调用虚拟函数和消息处理函数的内幕,让读者对MFC的编程接口有清晰的理解。

MFC的宏观框架体系

如前所述,MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。

这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。典型的MDI应用程序的构成将在下一节具体讨论。

为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。

总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。

MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。

MFC是C++类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C++对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。

我不知道别人用什么,反正我用MFC。毕竟控件多,方便。

不过,它也有一些问题,比如兼容性,这个问题是最不好的了。每次给客户机子上跑一些什么,都需要安装C++的运行库。

MFC开发可以节省时间,和成本。

毕竟现在做软件不好做。

所以,总的来说,MFC程序员在市场上占大多数。

以上就是关于如何学习MFC全部的内容,包括:如何学习MFC、MFC是什么意思、现在社会招聘C++程序员 用windows api 的多 还是 MFC的多等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9308743.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存