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

 

启动成功。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值