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. JS中,如何判断一个数是不是小数?如果是小数,如何判断它是几位小数??

    <script type="text/javascript">     var x = 4.23323;//测试的数字     var y = String(x).in ...

  2. Python3的第一个程序(三)

    现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你自己的电脑上.写程序也讲究一个感觉,你需 ...

  3. Github上的iOS App源码 (中文)

    Github版英文App地址 中文 : TeamTalk 蘑菇街. 开源IM. 电商强烈推荐. MyOne-iOS 用OC写的<一个> iOS 客户端 zhihuDaily 高仿知乎日报 ...

  4. MoreEffectiveC++Item35(基础议题)(条款1-4)

    条款1:区别指针和引用 条款2:最好使用C++转换操作符 条款3: 绝对不要以多态的方式处理数组 条款4: 避免无用的缺省构造函数 条款1:区别指针和引用 1.指针(pointer) 使用[*/-&g ...

  5. New Concept English three(20)

    26w/m 36 In 1908 Lord Northcliffe offered a prize of £1000 to the first man who would fly across the ...

  6. Shell 命令行,实现一个获取任意位数的随机密码的脚本

    Shell 命令行,实现一个获取任意位数的随机密码的脚本 每次我们想要获得一个密码的时候都很头疼,于是我之前自己用nodejs写了一个 Shell 脚本.这两天在学习 bash Shell 所以,想用 ...

  7. TreeMap实现原理及源码分析

    TreeMap是一个有序的key-value集合,基于红黑树(Red-Black tree)实现.该映射根据其键的自然顺序进行排序,或者根据创建时提供的Comparator进行排序. 对于TreeMa ...

  8. sql server不能删除数据库,显示错误:正在使用

    解决办法: use mastergoalter database database_name set single_user with rollback immediate --将数据库回滚到原始配置 ...

  9. 汇编语言---键盘KeyCode值列表

    键盘KeyCode值列表 收藏 keycode   0 =keycode   1 =keycode   2 =keycode   3 =keycode   4 =keycode   5 =keycod ...

  10. postfix邮件服务器搭建03-webmail安装篇

    本文接着上文的安装进行,介绍另一个WebMail功能更加人性化的roundcube.当然也可以对已有的postfix邮件系统进行功能完善 1.下载安装roundcube cd /server/tool ...