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

原创 2011年01月22日 12:32:00
  • 启动前做的事:初始化全局变量。

大概做了以下四件事:

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

 

启动成功。

 

VS2005 MFC程序打包发布

 1.新建安装部署项目 打开VS,点击新建项目, 选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定。 2.安装向导 关闭后打开安装向导,点击下一步,或者直...
  • ljsant
  • ljsant
  • 2016年07月16日 10:00
  • 471

VS2005调试MFC程序时出现Runtime error的解决办法

转载自:http://hi.baidu.com/%B3%E6%B5%C4%B4%AB%C8%CB/blog/item/1ee503e785263324b838206f.html 提示没有找到MS...

MFC程序执行过程剖析

一 MFC程序执行过程剖析 1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调...

MFC程序执行过程剖析

  • 2013年02月27日 16:02
  • 3KB
  • 下载

MFC程序的启动过程与相关函数的执行顺序

[转自:http://wenku.baidu.com/view/3bbcffdda58da0116c17499f.html] [JOEY:本篇实为《深入浅出MFC》第6章 MFC程序的生死因果的...

MFC程序的启动过程与相关函数执行顺序

了解MFC程序的启动过程,对于初学者来讲,了学习MFC很有帮助;对于不常用VC的人来说,过一段时间就会忘记。还是来记下来,方便以后查阅。 1、创建Application object对象theApp...

MFC程序的启动过程与相关函数执行顺序

了解MFC程序的启动过程,对于初学者来讲,了学习MFC很有帮助;对于不常用VC的人来说,过一段时间就会忘记。还是来记下来,方便以后查阅。 1、创建Application object对象theA...

MFC程序的启动过程与相关函数执行顺序

原文地址:http://hi.baidu.com/chuntian1919/blog/item/f5b7f5fd898e2c1408244d3c.html      了解MFC程序的启动过程,对于初学...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC程序启动过程(VS 2005代码剖析)
举报原因:
原因补充:

(最多只允许输入30个字)