一个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],于是发出WM_CLOSE.

CFrameWnd 并没有设置 WM_CLOSE 处理程序,于是交给默认处理程序。

默认函数对于 WM_CLOSE 的处理方式是调用 ""DestroyWindow,并因而发出 WM_DESTROY。

默认的 WM_DESTROY 处理方式是调用 ::PostQuitMessage ,因此发出WM_QUIT。

CWinApp::Run 收到 WM_QUIT 后会结束其内部的消息循环,然后调用ExitInstance,这是CWinApp的一个虚拟函数。

如果 CMyWinApp 改写了 ExitInstance,那么 CWinApp::Run 所调用的就是 CMyWinApp::ExitInstance,否则就是 CWinApp::ExitInstance。

最后回到 AfxWinMain,执行 AfxWinTerm,结束程序。

时间: 2024-10-01 15:57:52

一个MFC程序的生命历程的相关文章

一个Spark job的生命历程

一个job的生命历程 dagScheduler.runJob //(1) --> submitJob ( eventProcessLoop.post(JobSubmitted,***) //(2) --> eventProcessLoop //(3) --> onReceive(event: DAGSchedulerEvent) //(4) --> doOnReceive(event: DAGSchedulerEvent) //(5) --> case JobSubmitte

OD破解一个MFC程序无特征码无字符串软件笔记(简单的练习)

破解文件地址 https://pan.lanzou.com/i0lcf6j 查课之后发现是C++编译器,但不是易语言.....一个MFC的程序!搜索字符串无任何字符串MFC的按钮事件也没有找到!!也许是我记错了,如果有更好的方法评论一波! <<<MFC程序>>>特征码RELEASE特征码:FF 55 14 EB 7F FF 75 0C特征码来源:MFC42.DLLDEBUG特征码:FF 55 FC E9 48 04 00 00 33 C9特征码来源:MFC42D.DLL

一个C&amp;C++程序的生命历程

翻了好多博客,内容星星点点,没找到我想要的,现在吸取大神精华,加上本人拙见,总结如下: 一个C或C++程序从你开始编写,到结束,整个过程,都做了些什么,请看下文: 先看大体的过程:看图: 我在这里主要想说的就是,程序到这每个阶段都干了什么,这个有时候很重要,举个例子: #define BSC // #define BMC /* #define EMC */ //1.双斜杠注释 BSC lining is a goog boy //2./**/注释 BMC lining is good boy E

MFC源码解读(一)最原始一个MFC程序,手写不用向导

从这一篇开始,详细记录一下MFC的源码解读 四个文件,分别为: stdafx.h,stdafx.cpp,hello.h,hello.cpp 代码如下: //stdafx.h #include <afxwin.h> //stdafx.cpp #include "stdafx.h" //hello.h class CMyWinApp:public CWinApp { public: BOOL InitInstance(); }; class CMyFrameWnd:public

MFC六大机制 (1) MFC程序的初始化

本章将先介绍 MFC 的文档/视图结构,讲解实现该结构的数据结构,然后编写一个控制台应用程序来模拟 MFC 的初始化,理清 MFC 初始化的顺序,然后说明如何创建一个最基本的 MFC 应用程序. MFC 最重要的结构 文档/视图结构 MFC 提供了构造Windows应用程序的框架,它不仅为应用程序建立标准的结构,生成一系列启动文件,还提供标准的图形用户界面如菜单.工具栏.状态条等供开发人员在程序中补充完善,开发人员只需要完成针对待定应用的代码即可.其中最重要的框架就是其于文档/视图结构的文档应用

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

来源: http://blog.csdn.net/ljianhui/article/details/8781991 在MFC程序设计的学习过程中最令人感到难受,甚至于有时会动摇学习者信心的就是一种对于程序的一切细节都没有控制权的感觉.这种感觉来源于学习者不知道一个MFC程序是如何运行起来的(即一个MFC程序的执行流程)和MFC程序的设计思想和机制,即使是写过Windows程序的学习者,也会感到非常迷惘并且无从下手.而这种感觉的出现会使大家认为自己离开了书本上的例子就无法设计编制程序.下面我就来说

我的第一个Servlet程序和Servlet的生命周期函数

一.Servlet概念: Servlet(Server Applet),全称Java Servlet,未有中文译文.是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的 Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者. Servlet运行于支持Java的应用服务器中.从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用

一个三流院校毕业的程序员奋斗历程 (转)

一个三流院校毕业的程序员奋斗历程 分类: 微薄2011-03-25 18:28 1300人阅读 评论(10) 收藏 举报 工作delphi嵌入式windowsmotorola开发工具 这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能给刚如行的朋友们一点点帮助. 一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS.数据库,应用程序

从一个程序员到一个销售高手的心路历程

从一个程序员到一个销售高手的心路历程 0.引言 我大学本科读的是理工科,后来毕业以后,我逐渐走上了程 序员的道路.每天面对电脑一行一行的敲代码,这被我们程序员们戏称为“搬砖头”,因为我们所做的事跟民工搬砖头砌墙本质上是相同的,我们也是把一堆代码从 一个地方搬到另一个地方,然后改改让它面子上看起来挺好看,用起来结实耐用就算完工了. 干了6年的技术以后,我放弃了已做的非常 好的技术和积累起来的成绩,转而从0开始去做销售.后来经过自己的努力,我终于成长为一个销售和业绩翻倍高手,在销售和业绩翻倍方面取得