- 启动前做的事:初始化全局变量。
大概做了以下四件事:
- appmodul.cpp 67行 通过调用函数AfxInitialize初始化了MFC的线程局部存储功能和程序全局信息,这些信息最重要的有以下两个:
afxstate.cpp 398行 PROCESS_LOCAL(_AFX_BASE_MODULE_STATE, _afxBaseModuleState)
afxstate.cpp 117行 THREAD_LOCAL(_AFX_THREAD_STATE, _afxThreadState) - 类run time信息初始化
- 消息映射表生成
- 全局对象theApp构造
- 从_tWinMain开始
_tWinMain调用了AfxWinMain函数(以下代码均有删减)
AfxWinMain位于winmain.cpp中,它是程序程序的核心,主要执行了四步:AfxWinInit、InitApplication、InitInstance、Run
先看AfxWinInit函数,它用于初始化框架。
接下来进入InitApplication函数,它完成对整个应用程序的初始化工作。该函数是个虚函数,一般不覆盖它,所以调用的是appcore.cpp中的CWinApp::InitApplication,初始化文档管理器。
InitInstance函数对程序特定的实例进行初始化。它是个虚函数,程序中通过覆盖该函数,可以实现自己的功能。
InitInstance首先创建了一个CMainWindow对象,CMainWindow对象的继承结构如下:
CObject
CCmdTarget
CWnd
CFrameWnd
CMainWindow
对象创建过程如下:
ShowWindow显示窗口
UpdateWindow更新窗口,发送WM_PAINT消息
至此,窗口创建完成。
函数执行流程回到AfxWinMain中,执行Run(),处理消息循环。
启动成功。