MFC程序的执行过程
1 首先产生全局的对象theApp(任何一个mfc程序都会产生这样一个对象)
2 进入到 int AFXAPI afxWinMain(…)这个函数中。
3 进入到 AfxWinInit(…)。
SDK程序WinMain函数的四个参数HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpCmdLine在CwinApp中都是成员变量,在这一步,将afxWinMain传进来的这些参数值赋给theApp对应的成员变量。
4 pApp->InitApplication() 调用的是CwinApp:: InitApplication()。该函数在C**WinApp中并未被改写。
5 pApp->InitInstance()。调用的是C**WinApp:: InitInstance()。该函数被改写了。
6 第5步中new C**FrameWnd,引发C**FrameWnd的构造函数。
7 执行C**FrameWnd的构造函数中的Create函数。调用的是CFrameWnd::Create函数。
8 CWnd::CreateEx() 。该函数中定义了cs结构(cs可以在下一步中修改)。产生窗口,得到窗口句柄hWnd。
9 CFrameWnd::PreCreateWindow (CREATESTRUCT & cs)。不同类的PreCreateWindow成员函数都是在窗口产生之前一刻被调用,准备用来注册窗口类。可以这样理解,在mfc为我们注册窗口类之前,预留了这个接口,我们只要在PreCreateWindow修改cs中的数据,就可以产生我们期望的窗口属性。
10 注册该窗口.
11 回到第5步中,显示窗口。
12 pApp->Run 调用CwinApp::Run。CwinApp::Run中又调用了CwinTheard::Run()。该函数维护消息队列中的消息循环,发送消息到AfxWndProc。下面就是Message Map的事了…