VC++ 之MFC内部机制一
2009-01-19 12:13
225 查看
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函数
关联在一起。
概论
产生全局对象来启动应用程序,调用子类构造函数对全局对象进行初始化,进而调用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
#include <iostream> using namespace std; int a=6; //在编译时最先进行赋值 class CPoint { public: CPoint() //2 { } }; CPoint pt; //1 //3 void main() //4 { cout<<a<<endl; getchar(); }
///////////////////////////////////////////////
二、
1.全局对象的作用:
在生成CTestApp类中,构造函数CTestApp()后有一个全局对象:
////////////////////////////////////////
CTestApp::CTestApp() { // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 CTestApp 对象 CTestApp theApp;
////////////////////////////////////////
为什么定义一个全局对象,在main函数之前执行?全局对象有什么作用?
全局对象 theApp 是一个应用程序对象,每一个MFC应用程序中,有且仅有一个从 CWinApp 派生出来的类,
那么也就只有一个从应用程序实例化得到的对象,这个对象就表示了应用程序本身。
(在Win32 SDK中,表示一个应用程序,从WinMain入口开始,通过一个应用程序实例号(标识)来表示)
在基于MFC的应用程序中,是产生一个应用程序对象theApp,来唯一表示这个应用程序。
CWinApp在appcore.cpp中--全局对象theApp--子类构造函数调用CTestApp()--基类构造函数调用CWinApp()在appcore.cpp中
将派生类同微软提供的基类进行关联,从而把在应用程序中要进行的初始化工作和全局对象的构造
在CWinApp得以完成。通过这种方式,不管从哪一个类进行派生,都可以把子类和基类和WinMain函数
关联在一起。
相关文章推荐
- VC++ 之MFC内部机制二
- VC++ 之MFC内部机制三
- VC++ 之MFC内部机制四
- MFC内部运行机制
- RTTI 与消息机制(VC_MFC)
- 孙鑫VC++讲座笔记-(4)MFC消息映射机制的剖析
- 孙鑫VC++讲座笔记-(1)Windows程序内部运行机制
- 关于《VC++权威剖析:MFC的原理、机制与开发实例》中的函数重载
- [C++ VC MFC] MFC消息响应机制
- VC++ MFC属性表对话框的运行机制
- 孙鑫VC++讲座笔记-(1)Windows程序内部运行机制
- 孙鑫VC++讲座笔记-(1)Windows程序内部运行机制
- vc++窗口的创建过程(MFC消息机制的经典文章)
- 孙鑫VC++讲座笔记-(1)Windows程序内部运行机制
- 【VC编程】笔记3---使用Win32SDK编程,模仿MFC的消息映射处理机制
- vc++窗口的创建过程(MFC消息机制的经典文章)
- 深入浅出话VC++(1)——Windows程序内部运行机制
- 引用 MFC类库复习1(2)--CArray内部机制
- VC/MFC DDX和DDV机制介绍
- 孙鑫VC++讲座笔记-(4)MFC消息映射机制的剖析(修订版)