VC++ 之MFC内部机制一

来源:互联网 发布:斯琴格日乐 知乎 编辑:程序博客网 时间:2024/06/04 18:07

 

VC++ 之MFC内部机制一

 

 

概论

产生全局对象来启动应用程序,调用子类构造函数对全局对象进行初始化,进而调用CWinApp构造函数进行初始化,

在CWinApp构造函数中,完成了应用程序初始化工作,同时将子类的指针保存起来,再进入WinMain()函数,在AfxWinMain()中,

获取子类的指针,用这个指针去调用InitInstance()虚拟函数,进而调用子类InitInstance()函数,在这个子类的

InitInstance()完成应用程序初始化工作:窗口注册,窗口创建,窗口显示,更新,消息循环.

 

一、

1.MFC是面向对象函数库,可以完成Windows应用程序开发;

 

2.在生成基于MFC的应用程序时,会产生如下的类(以建立Test为名字的工程为例,以下的代码均以此为例):

CAboutDlg

CMainFrame

CTestApp

CTestDoc

CTestView

 

3.在编译链接时应用程序时,由链接器在MFC中找到WinMain函数,并链接到当前的应用程序中;

 

4.关于全局变量和全局对象,都在加载main函数之前分配内存空间,并进行初始化工作,顺序为:基类构造函数-->子类构造函数-->全局对象-->main函数;

如下的例子:

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

// main.cpp

 

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

 

二、

1.全局对象的作用:

 

在生成CTestApp类中,构造函数CTestApp()后有一个全局对象:

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

 

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

为什么定义一个全局对象,在main函数之前执行?全局对象有什么作用?

全局对象 theApp 是一个应用程序对象,每一个MFC应用程序中,有且仅有一个从 CWinApp 派生出来的类,

那么也就只有一个从应用程序实例化得到的对象,这个对象就表示了应用程序本身。

(在Win32 SDK中,表示一个应用程序,从WinMain入口开始,通过一个应用程序实例号(标识)来表示)

在基于MFC的应用程序中,是产生一个应用程序对象theApp,来唯一表示这个应用程序。

 

CWinApp在appcore.cpp中--全局对象theApp--子类构造函数调用CTestApp()--基类构造函数调用CWinApp()在appcore.cpp中

 

将派生类同微软提供的基类进行关联,从而把在应用程序中要进行的初始化工作和全局对象的构造

在CWinApp得以完成。通过这种方式,不管从哪一个类进行派生,都可以把子类和基类和WinMain函数

关联在一起。

 

 

原创粉丝点击