关闭

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

标签: mfcnullthreadinitialization文档管理winapi
1622人阅读 评论(1) 收藏 举报
分类:
  • 启动前做的事:初始化全局变量。

大概做了以下四件事:

  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(),处理消息循环。

 

启动成功。

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:135594次
    • 积分:2092
    • 等级:
    • 排名:第18283名
    • 原创:75篇
    • 转载:3篇
    • 译文:2篇
    • 评论:6条
    文章分类
    最新评论