MFC 运行过程(摘录)

原创 2007年10月14日 10:07:00
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,结束程序 

MFC窗口程序启动运行机制剖析

本文的测试环境: IDE:VS2010 + VC助手(GO按钮对后面的跟踪调试很有用) 操作系统:Win8.1...
  • eldn__
  • eldn__
  • 2014年07月18日 21:13
  • 3144

深入跟踪MFC程序的执行流程

在MFC程序设计的学习过程中最令人感到难受,甚至于有时会动摇学习者信心的就是一种对于程序的一切细节都没有控制权的感觉。这种感觉来源于学习者不知道一个MFC程序是如何运行起来的(即一个MFC程序的执行流...
  • ljianhui
  • ljianhui
  • 2013年04月10日 11:39
  • 6405

MFC的运行过程分析

MFC程序的运行细节剖析        MFC程序也是Windows程序,所以它应该也有一个WinMain,但是在程序中看不到它的踪影。其实在程序进入点之前,还有一个(而且仅有一个)全局对象(the...
  • cheng_xu_yuanlilin
  • cheng_xu_yuanlilin
  • 2015年07月22日 09:43
  • 1038

MFC 程序运行过程

为防止原文删除不可寻,转载仅供个人查阅。尊重原创,请看原文。 原址:http://dvwt.blog.163.com/blog/static/34325470200862945919293/ ...
  • baixue0729
  • baixue0729
  • 2016年01月10日 20:39
  • 734

MFC SDI 执行流程

在MFC程序设计的学习过程中最令人感到难受,甚至于有时会动摇学习者信心的就是一种对于程序的一切细节都没有控制权的感觉。这种感觉来源于学习者不知道一个MFC程序是如何运行起来的(即一个MFC程序的执行流...
  • baidu_25211613
  • baidu_25211613
  • 2015年01月27日 17:02
  • 1056

(学习笔记2)开发环境的配置及MFC创建流程

本系列博文基于vs2010 MFC来写,陆陆续续会更新。有的代码已经写完了,正在整理更新中,先说明一下开发环境以及MFC的创建流程。下面以截图形式: 然后单击完成 然后单击下一步 然后单击...
  • caicai_zju
  • caicai_zju
  • 2016年04月05日 22:45
  • 1550

MFC数据库操作 - 存储过程

①、什么是存储过程? 存储过程(Stored Procedure)是数据库系统中,一组为了完成特定功能的SQL语句集, 经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程...
  • a550853006a
  • a550853006a
  • 2015年04月12日 22:27
  • 643

深入分析MFC启动流程

精简以上代码,就会发现其实是一样的 1.初始化主框架,保存参数 : if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))...
  • comwise
  • comwise
  • 2013年11月27日 15:59
  • 2326

[自习室]摘录代码大全:类的设计

ADT abstract data type 抽象数据类型:一些数据以及对这些数据所进行操作的集合;尽可能限制类和成员的可访问性;对于一个类:提供一致的抽象...
  • mangosnow
  • mangosnow
  • 2014年12月18日 23:38
  • 1178

MFC程序的执行顺序

简介 MFC只是对WIN32的API进行了封装,所以MFC的本质还是WIN32程序.有了这层封装,我们看不到WIN32的WinMain函数,也就不清楚MFC程序的启动过程.虽然我们没有看到WinMa...
  • a906168402
  • a906168402
  • 2017年04月27日 11:26
  • 391
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC 运行过程(摘录)
举报原因:
原因补充:

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