MFC程序启动过程(VS 2005代码剖析)

  • 启动前做的事:初始化全局变量。

大概做了以下四件事:

  1. appmodul.cpp 67行 通过调用函数AfxInitialize初始化了MFC的线程局部存储功能和程序全局信息,这些信息最重要的有以下两个:
    afxstate.cpp 398行 PROCESS_LOCAL(_AFX_BASE_MODULE_STATE, _afxBaseModuleState)
    afxstate.cpp 117行 THREAD_LOCAL(_AFX_THREAD_STATE, _afxThreadState) 
  2. 类run time信息初始化
  3. 消息映射表生成
  4. 全局对象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(),处理消息循环。

 

启动成功。

 

阅读更多
个人分类: MFC
上一篇代码技巧
下一篇Poj 1899
想对作者说点什么? 我来说一句

MFC程序运行机制剖析

2011年12月17日 38KB 下载

没有更多推荐了,返回首页

关闭
关闭