关于如何看懂mfc程序 初学mfc入门

来源:互联网 发布:芄璃入骨相思知不知 编辑:程序博客网 时间:2024/05/14 13:28

本文适合初学者阅读,本人也算初学者,刚看出一点门道,献丑了,只求抛砖引玉吧!

mfc(Microsoft Foundation Class)因为是基于C++面向对象设计的,所以程序中充斥着很多函数名!  库函数之间相互调用!程序本身会根据需要也定义一些函数!这些函数相互纠缠,一个套一个!看着会有错觉:这程序极其复杂!其实,C++中类封装、继承等等本意是想简化程序处理流程,减少程序工作量的!现在反倒适得其反,让很多初学者望而却步了!

无可否认mfc库函数超多,类也多(微软的基础类库吗!看全名也猜到了),看MSDN(Microsoft Developer Network)又全是英文说明,这样本来不大的程序,却让人看不懂!辛辛苦苦的分析每个函数,MSDN查各个函数的功能和用法,看完仍然如坠云里雾里!


如何解决这个困境!?

首先确实需要一段过程先了解mfc封装机制是如何工作的?

        基本知识点:

        知道有两个关键类App类(应用程序本身)和CWnd类(窗口)。

用户一般必须自定义两个类,继承上边的两个类(如一般书中例题会定义class CMyApp:public CWinApp和class CMainWindow :public CWnd。)。上边两个类中,一个CWinApp类中的InitInstance不可小觑!其工作完成基本的窗口初始化,整个程序的基础;一个类CWnd,完成所有的窗口内实现功能的操作,是整个程序功能性最强的部分!CWnd类一般会比较庞大,其中涉及到消息映射函数,还涉及到自定义函数功能如何划分,调用库函数等!具体程序实现说白了就是类和类之间的分工合作,成员函数的调用现在我的理解,不保证正确,还请高手指点。)

        了解消息映射机制

知道mfc程序是基于消息来驱动的,没有消息就没有动作。如果把mfc应用程序比作一个怪物,那么这个怪物超级懒,打一巴掌它才会有反应!打一巴掌就是给它一个消息,它的反应就是你定义的消息响应函数。

所以学习mfc必须熟悉常见的消息和对应的消息响应函数,最好会自己定义需要的自定义消息和响应函数。知道如何将消息与响应函数对应起来。

然后通过程序积累,掌握一些常用的类和类中常用的、基本的成员函数。常用的消息映射函数

常用类:

     功能类:CPoint、CRect、CString、CClientDC等;

   窗口类:CFrameWnd、CDialog、CView等;

   常用对象:CWinApp类、CDocument、CSingleDocTemplate等;

这些类常常作为基类或者在实现某些常用功能时使用。并且这些类中有一些常用的成员函数、有固定的执行顺序。只有熟悉了这些,才知道如何在这个庞然大物般的空壳子里,在哪儿快速的编写代码!

常用的消息和消息响应函数:

   WM_PAINT, OnPaint();

   WM_TIMER, OnTimer();

           WM_MOUSEWHELL, OnMouseMove();

   WM_LBUTTONDOWN, OnLButtonDown();

   ......

最后,看懂程序很关键的一点,分清楚程序中哪些是用户自定义的函数,哪些是库函数;库函数和自定义函数之间怎么合作完成了这个程序;函数调用和程序功能如何划分,又是如何实现的;整个编译过程中,各个函数的执行顺序怎样(通过设置断点就可获知)。多看几个例子,每个例子都力求深入的分析,慢慢就会积累一定的感觉,等形成思维惯性,mfc就能高效的服务于我们自己编写的程序了!(这也是我当前的目标了!)

路漫漫其修远兮!

吾将上下而求索!



----------------------------

2016.12.12日更新------mfc单文档视图结构

----------------------------

创建一个mfc单文档视图结构的应用程序,会产生最最基本的四个类:(App类、Doc类、View类、MainFrame类

App类:这个类的名字就是项目的名字,这个类的cpp文件里有一句至关重要但不起眼的一行代码,这行代码定义自己类的一个对象,这个对象隐含的执行——调用WinMain入口函数,引发了整个应用程序的执行过程。
Doc类:负责数据,给View类提供接口。

View类:负责数据显示,关于绘制的相关代码在这里添加。

MainFrame类:负责窗口,窗口拆分工作就在这个类里。


执行顺序:App——> Doc——> MainFrame——> View

如果理解以上顺序:

1、定义唯一一个应该程序对象;——App(在项目里就是"项目名.h "、"项目名.cpp")

2、准备数据;——Doc

3、注册绘制窗口;——MainFrame

4、将准备好的数据(如果有的话),在窗口中绘制出来。——View

0 0
原创粉丝点击