MFC 运行过程(摘录)

来源:互联网 发布:淘宝短款旗袍 编辑:程序博客网 时间:2024/05/18 00:13

MFC 运行过程(摘录)
程序的诞生
*Application object 产生,内存于是获得配置,初值亦设立了

*AfxWinMain 执行AfxWinInit,后者又调用AfxInitThread,把消息队列尽量加大到96

*AfxWinMain 执行InitApplication。这是CWinApp 的虚函数,但我们通常不改写它

*AfxWinMain 执行InitInstance。这是CWinApp 的虚函数,我们必须改写它

*CMyWinApp::InitInstance 'new' 了一个CMyFrameWnd 对象

*CMyFrameWnd 构造函数调用Create,产生主窗口。我们在Create参数中指定的窗口类是NULL,于是MFC 根据窗口种类,自行为我们注册一个名为"AfxFrameOrView42d" 的窗口类

*回到 InitInstance 中继续执行 ShowWindow,显示窗口

*执行 UpdateWindow,于是发出WM_PAINT

*回到AfxWinMain,执行Run, 进入消息循环

程序开始运行
*程序获得WM_PAINT消息(藉由CWinApp::Run中的::GetMessage循环)

*WM_PAINT经由::DispatchMessage 送到窗口函数CWnd::DefWindowProc中

*CWnd::DefWindowProc将消息传递过消息映射表格(Message Map)

*传递过程中发现有相符项目,于是调用项目中对应的函数.此函数时应用程序利用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP
之间的宏设立起来的

*标准消息的处理程序亦有标准命名,例如WM_PAINT必然由OnPaint处理

程序的结束
*使用者单击 File/Close 发出WN_CLOSE

*CMyFrameWnd 并没有设置WM_CLOSE处理程序,于是交给默认的处理程序

*默认函数对于WN_CLOSE的处理方式是调用::DestroyWindow,并因而发出WM_DESTROY

*默认的WN_DESTROY处理方式是调用::PostQuitMessage,因此发出WM_QUIT

*CWinApp::Run收到WM_QUIT后会结束其内部之消息循环,然后调用ExitInstance,这是CWinApp的一个虚拟函数

*如果CMyWinApp改写了ExitInstance,那么CWinApp::Run所调用的就是CMyWinApp::ExitInstance,否则就是CWinApp::ExitInstance

*最后回到AfxWinMain,执行AfxWinTerm,结束程序 

原创粉丝点击