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消息循环的更多相关文章

  1. 深入探讨MFC消息循环和消息泵

    首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情.在MFC ...

  2. (转) MFC的入口点与消息循环,消息映射

    博文分析的很不错,尤其是替换默认窗口过程的这块,本人觉得,所有的这些都可以参阅侯杰的<深入浅出MFC >. 来自:http://blog.csdn.net/sryan/article/de ...

  3. MFC模态对话框的消息循环

    MFC模态对话框的消息循环 单线程程序, 当主窗口响应函数中弹出模态对话框时,为什么主窗口响应函数可能照常工作? 当弹出模态对话框时,线程的消息循环无法返回,父窗口的事件本应没人处理,应该处于卡死状态 ...

  4. MFC中PeekMessage的使用,非阻塞消息循环

    在程序设计的时候经常要进行一个数据循环,比如播放音乐需要循环的向缓冲区里面写入数据,在这个时候比较通用的方法是建立一个线程做事情,但是有时候不想创建多线程就可以使用微软提供的PeekMessage方法 ...

  5. MFC消息响应机制 q

    MFC消息响应机制分析 1 引言微软公司提供的MFC基本类库(Microsoft Foundation Classes),是进行可视化编程时使用最为流行的一个类 库.MFC封装了大部分Windows ...

  6. 揭开.NET消息循环的神秘面纱(GetMessage()无法取得任何消息,就会进入Idle(空闲)状态,进入睡眠状态(而不是Busy Waiting)。当消息队列不再为空的时候,程序会自动醒过来)

    揭开.NET消息循环的神秘面纱(-) http://hi.baidu.com/sakiwer/item/f17dc33274a04df2a9842866 曾经在Win32平台下奋战的程序员们想必记得, ...

  7. vc++窗口的创建过程(MFC消息机制的经典文章)

    一.什么是窗口类  在Windows中运行的程序,大多数都有一个或几个可以看得见的窗口,而在这些窗口被创建起来之前,操作系统怎么知道该怎样创建该窗口,以及用户操作该窗口的各种消息交给谁处理呢?所以VC ...

  8. MFC消息映射的原理:笔记

    多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表:两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里 ...

  9. MFC消息机制

    何谓消息.消息处理函数.消息映射?消息简单的说就是指通过输入设备向程序发出指令要执行某个操作.具体的某个操作是你的一系列代码.称为消息处理函数. 在SDK中消息其实非常容易理解,当窗口建立后便会有一个 ...

随机推荐

  1. Java复习4.数组初始化.

    Java复习4.Java中的数组声明方式  20131004 1.数组声明和初始化, 数组元素和变量一样,可以在定义的时候i进行初始化.数组元素的初始化工作实在编译阶段完成的,可以减少运行时间. 在初 ...

  2. java根据所给的根目录获取底下所有文件夹结构

    所写工具类背景:项目经理叫我写个工具类实现:给个项目的根目录分析java文件及jsp文件.记录文件类型.路径.文件名和包名. 定义的实体类(这里我用了easypoi以后方便写入excel文档) @Da ...

  3. Win10 怎么给php文件设置默认打开应用

    一,首先以管理员身份打开命令提示符 二,assoc .php=phpfile 创建一个文件关联 三,ftype phpfile="E:\Program Files\Sublime Text ...

  4. Mac上安装第三方应用显示包资源破坏解决办法

    Mac上安装第三方应用显示包资源破坏解决办法 步骤1:Spotlight搜索(快捷键:command+空格或右上角搜索的符号):搜索 “终端”步骤2:直接复制粘贴 sudo spctl --maste ...

  5. 修复 海盗船 k70 lux 未检测到设备(k70 no device detected)

    corsair k70 lux 上周收到的生日礼物,头一次用机械键盘,还是这么高端的机械键盘(729RMB),手感一级棒.但是,有问题啊!把键盘上的 bios按钮拨到8上电脑可以识别,scroll 灯 ...

  6. _routing字段介绍

    一个document通过以下公式被路由到该索引下一个特定的分片: shard_num = hash(_routing) % num_primary_shards _routing的默认值是文档的_id ...

  7. Java基础学习-接口-概述以及成员特点

    package interfaceclass; /*接口的概述: * 接口解决的问题: * 因为java中的继承的单一局限性(子类只能继承一个父类),为了打破这个局限,java语言提供了一个机制,接口 ...

  8. 微信测试帐号如何设置URL和Token,以及相关验证的原理

    首先说明,本帮助文档是利用javaweb的Servlet来进行“接口配置信息配置信息”认证的. 在学习微信公众号开发的时候,读到填写服务器配置的帮助部分,总是不能理解为啥按照他的步骤做总是设置失败(吐 ...

  9. Vim技能修炼教程(4) - 基本功

    基本功 前面我们学会了插件管理器和如何实现语法高亮,相信大家已经从中体会到了vim插件的强大功能.现在,是时候回来补一补基本功了. Vi有三种主要模式,正常模式,插入模式和可视化模式.正常我们推荐的方 ...

  10. 【剑指offer】求1+2+…+n,C++实现

    原创博文,转载请注明出处! # 题目 # 思路 使用递归计算累加,利用逻辑与的短路特性终止递归.逻辑与的短路特性 : A&&B,A>0时,执行B:A=0时,不执行B. # 代码 ...