MFC程序的消息处理顺序

MFC应用程序中处理消息的顺序

1.AfxWndProc()      该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc

2.AfxCallWndProc()  该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数

3.WindowProc()      该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数

4.OnWndMsg()        该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数

5.OnCommand()       该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()就会调用OnCmdMsg()函数

6.OnCmdMsg()        根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。例如:如果拥有该窗口的类是一个框架类,则命令和通知消息也被传递到视图和文档类,并为该类寻找一个消息处理函数

 

MFC应用程序创建窗口的过程

1.PreCreateWindow()   该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等)

2.PreSubclassWindow() 这也是一个重载函数,允许首先子分类一个窗口

3.OnGetMinMaxInfo()   该函数为消息响应函数,响应的是WM_GETMINMAXINFO消息,允许设置窗口的最大或者最小尺寸

4.OnNcCreate()        该函数也是一个消息响应函数,响应WM_NCCREATE消息,发送消息以告诉窗口的客户区即将被创建

5.OnNcCalcSize()      该函数也是消息响应函数,响应WM_NCCALCSIZE消息,作用是允许改变窗口客户区大小

6.OnCreate()          该函数也是一个消息响应函数,响应WM_CREATE消息,发送消息告诉一个窗口已经被创建

7.OnSize()            该函数也是一个消息响应函数,响应WM_SIZE消息,发送该消息以告诉该窗口大小已经发生变化

8.OnMove()            消息响应函数,响应WM_MOVE消息,发送此消息说明窗口在移动

9.OnChildNotify()     该函数为重载函数,作为部分消息映射被调用,告诉父窗口即将被告知一个窗口刚刚被创建

 

MFC应用程序关闭窗口的顺序(非模态窗口)

1.OnClose()       消息响应函数,响应窗口的WM_CLOSE消息,当关闭按钮被单击的时候发送此消息

2.OnDestroy()     消息响应函数,响应窗口的WM_DESTROY消息,当一个窗口将被销毁时,发送此消息

3.OnNcDestroy()   消息响应函数,响应窗口的WM_NCDESTROY消息,当一个窗口被销毁后发送此消息

4.PostNcDestroy() 重载函数,作为处理OnNcDestroy()函数的最后动作,被CWnd调用

MFC应用程序中打开模式对话框的函数调用顺序

1.DoModal()             重载函数,重载DoModal()成员函数

2.PreSubclassWindow()   重载函数,允许首先子分类一个窗口

3.OnCreate()            消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建

4.OnSize()              消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化

5.OnMove()              消息响应函数,响应WM_MOVE消息,发送此消息,以告诉窗口正在移动

6.OnSetFont()           消息响应函数,响应WM_SETFONT消息,发送此消息,以允许改变对话框中控件的字体

7.OnInitDialog()        消息响应函数,响应WM_INITDIALOG消息,发送此消息以允许初始化对话框中的控件,或者是创建新控件

8.OnShowWindow()        消息响应函数,响应WM_SHOWWINDOW消息,该函数被ShowWindow()函数调用

9.OnCtlColor()          消息响应函数,响应WM_CTLCOLOR消息,被父窗口发送已改变对话框或对话框上面控件的颜色

10. OnChildNotify()     重载函数,作为WM_CTLCOLOR消息的结果发送

 

MFC应用程序中关闭模式对话框的顺序

1.OnClose()        消息响应函数,响应WM_CLOSE消息,当"关闭"按钮被单击的时候,该函数被调用

2.OnKillFocus()    消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送

3.OnDestroy()      消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送

4.OnNcDestroy()    消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送

5.PostNcDestroy()  重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用

打开无模式对话框的顺序

1.PreSubclassWindow()    重载函数,允许用户首先子分类一个窗口

2.OnCreate()             消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建

3.OnSize()               消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化

4.OnMove()               消息响应函数,响应WM_MOVE消息,发送此消息以告诉窗口正在移动

5.OnSetFont()            消息响应函数,响应WM_SETFONT消息,发送此消息以允许改变对话框中控件的字体

以上这些的执行都是按给定的顺序执行!

只有清楚的了解应用程序的执行顺序,才能在编写代码的时候知道,在什么时候应该执行什么,以及在什么地方该处理什么!
这只是本人总结的一点小小的经验,希望能对MFC的初学者有所帮助!

时间: 2024-10-27 17:22:53

MFC程序的消息处理顺序的相关文章

jpeg2000-Kakadu程序的执行顺序

问题描述 Kakadu程序的执行顺序 求教Kakadu程序的执行顺序是怎么样的啊?有没有详细的解释啊. 解决方案 http://blog.sina.com.cn/s/blog_5e4ef0460100wii0.html 解决方案二: MFC程序的执行顺序ios程序的执行顺序ios 程序启动执行顺序

C++MFC编程笔记day01 MFC介绍、创建MFC程序和重写消息处理

一.MFC概念和作用 1.全称Microsoft Foundation Class Library,我们称为微软基础类库,封闭了绝大部分的win32 Api函数,C++语法中的数据结构,程序的执行流程MFC就是一个库(动态库,静态库)MFC还是一个程序框架 2.为什么使用MFC基于框架编程,提高工作效率,减少开发周期,节约开发成本. 二.几个重要的头文件 afx.h    -绝大部分类的声明头文件 afxwin.h -包含了afx.h和windows.h afxext.h -提供了扩展窗口类的支

MFC程序员WTL指南(5)对话框与控件

对第四章的介绍 MFC 的对话框和控件的封装真得可以节省你很多时间和功夫.没有MFC对控件的封装,你要操作控件就得耐着性子填写各种结构并写很多的SendMessage调用.MFC还提供了对话框数据交换(DDX),它可以在控件和变量之间传输数据.WTL 当然也提供了这些功能,并对控件的封装做了很多改进.本文将着眼于一个基于对话框的程序演示你以前用MFC实现的功能,除此之外还有WTL消息处理的增强功能.第五章将介绍高级界面特性和WTL对新控件的封装. 回顾一下ATL的对话框 现在回顾一下第一章 提到

MFC程序员WTL指南(2)ATL界面类

在你开始使用WTL或着在本文章的讨论区张贴消息之前,我想请你先阅读下面的材料. 你需要开发平台SDK(Platform SDK).你要使用WTL不能没有它,你可以使用在线升级安装开发平台SDK,也可以下载全部文件后在本地安装.在使用之前要将SDK的包含文件(.h头文件)和库文件(.Lib文件)路径添加到VC的搜索目录,SDK有现成的工具完成这个工作,这个工具位于开发平台SDK程序组的"Visual Studio Registration"文件夹里. 你需要安装 WTL.你可以从微软的网

在MFC程序中显示 JPG/GIF图像

如果你是一个使用VB编程的程序员,要在程序中显示JPG或者GIF图像简直易如反掌,将图像控件拖到Form中,分分钟即可搞掂.但是C++程序员要显  示同样的图形却没有那么轻松,那么是不是要自己编写JPG解压缩代码呢?当然不用那么复杂啦!本文将针对这个问题讨论如何在MFC中显示JPG或者GIF 图像. 用VB写图像显示程序之所以如此轻松,完全是利用了琳琅满目的图像处理控件,把你想要做的事情都一一搞掂.而C++程序员为了实现相同的功能必须忙 乎半 天.其实,C/C++程序员也能使用那些VB程序员所用

MFC程序,数字图像,检测到边缘、转化成二维点阵之后,如何获取关键点

问题描述 MFC程序,数字图像,检测到边缘.转化成二维点阵之后,如何获取关键点 背景:在做毕设,题目是基于单幅数字图像进行瓷器的三维重建,导师给的思路是对瓷器的正视图进行边缘检测,然后对获取的边缘进行处理,得到完整的母线,最后将母线上的点作为样条线的控制点导入3dsmax中车削建模. 问题:我现在已经能够处理得到单像素母线轮廓了,但是像素点太密了,直接导入建模数据量太大,所以想在母线上提取关键点,我现在觉得可能是和曲线拟合相关,但具体不是很有思路,想问问大家 解决方案 非刚体怎么提取关键点,这个

mfc求助-求MFC程序制作,本人初学者,很多都不懂,希望能有大神提供样本参考。

问题描述 求MFC程序制作,本人初学者,很多都不懂,希望能有大神提供样本参考. 摇杆 主动快带动从动块 键盘WD能控制主动块左右移动菜单里面有"绘制轨迹"选项 和 "消除轨迹" 选项 绘制连杆中点的轨迹 消除轨迹 求大神给个样本参考 T.T

人脸检测-下载的mfc程序如何更改界面按钮。急求!

问题描述 下载的mfc程序如何更改界面按钮.急求! 2C 在做车辆识别的研究,下载了一个人脸检测的程序,不知道如何把工具栏的"人脸检测"修改成"车辆检测"有会的大神,希望帮忙解答. 解决方案 直接看代码,查找对应修改不就行了 或者你到RC对应修改菜单就行了 解决方案二: 如果有源代码,直接修改:如果没有源代码,可以考虑使用资源修改器等工具,改一个字符串还是很简单的. 解决方案三: 好像是在工程资源视图下可以改正 解决方案四: 打开资源,找到菜单,里面可以直接修改 解

MFC程序员WTL指南(1)中文版序言

我一直在寻找这样一个类库:他对Windows的窗口提供面向对象的封装,有灵活的消息响应机制和比较完备的界面框架解决方案,对标准控件提供简练实用的封装,支持操作系统的新特性,支持功能扩充和二次开发,有代码自动生成向导机制,生成的程序使用较少的系统资源,最后是有完全的代码支持和文档支持. 你会说那就用MFC吧! 是的,我一直使用MFC,但我对MFC已经越来越厌倦了.陈旧的类库使得它无法支持操作系统的新特性(MFC的类库从4.21版之后就没有更新了,而那时是1998年,人们使用Windows 95和w