打开一个MFC APPWizard(exe)工程,跟踪其执行步骤,可以发现,是以下顺序:
1)CXXApp中的全局变量定义(在WinMain()函数之前定义的全局变量)
CXXApp theApp;
2)调用CXXApp构造函数(当然,创建一个类,它首先会调用自己的构造函数,这时WinMain()还没有运行呢,呵呵奇怪吧?跟上面例子的变量a,其实是差不多的。)
CXXApp ::CXXApp(){}
3)进入Winmain函数(_tWinMain为宏,值为WinMain)(这个函数不是我们自己写的,而且是隐藏在一个比较隐蔽的文件里面,D:/Program Files/Microsoft Visual Studio/VC98/MFC/src/WINMAIN.CPP里面。)
_tWinMain(){} (如果你查看它的定义,#define _tWinMain WinMain,其实两者是一样的)
4)完成初始化工作:包括窗口类注册、窗口产生、显示和更新
pThread->InitInstance() (由于InitInstance是虚函数,所以这次调用的是派生类的InitInstance()函数,也就是你能在theApp里面看到的那一个函数)
对于MFC程序,MainFrame,View,ToolBar,Controlbar等都是窗口,所以下面的窗口注册与创建、显示等要反复调用多次,一次对应一个窗口
(1) 注册窗口类
AfxEndDeferRegisterClass()(相当于SDK里面的RegisterClass()函数)
(2)创建窗口
CMainFrame::PreCreateWindow()//反复调用一次是给我们修改窗口属性的机会
CFrameWnd::Create()
(3) 消息循环
PumpMessage()