做VC开发必须熟悉消息机制,笔试面试重点,自己在这方面很欠缺,搜集学习一下

  1. WM_CREATE CreateWindow 初始化工作

  2. GetMessage 遇到WM_QUIT,程序结束

  3. DispatchMessage 向窗口派送消息

  4. 重复2,3操作

  5. 关闭按钮,发出WM_CLOSE

  6. DefWindowProc处理WM_CLOSE消息,调用DestroyWindows消息,发出WM_DESTROY

  7. 调用WM_QUIT消息,程序结束

  8. 一个进程的产生和死亡:

  9. 1shell调用CreateProcess激活.exe;

  10. 2产生进程核心对象,计数为1;

  11. 3系统创建一个4GB的地址空间;

  12. 4加载器将必要代码加载到上诉地址空间(.exe程序 DLLs());

  13. 5系统为此产生一个主线程,线程才是CPU分配时间的对象;

  14. 6系统调用CRuntime库里面的Startup code

  15. 7startup code 调用Winmain函数

  16. 8程序开始运行;

  17. 9关闭窗口,使得WinMain中消息结构体循环结束(如上面所述)于是WInMain 函数结束;

  18. 10回到startup code;

  19. 11回到系统,系统调用ExitProcess结束进程

  20. // 调用CreateWindow后产生第一条消息:

  21. CreateWindow()

  22. WM_GETMINMAXINFO "当窗口将要改变大小或位置时,由系统发送本消息给窗口,用户拖动一个可重置大小的窗口时便会发出本消息"

  23. WM_NCCREATE "当某窗口首次被创建时,本消息在WM_CREATE消息发送前发送"

  24. WM_NCCALCSIZE "当某窗口的客户区的大小和位置须被计算时发送本消息"

  25. WM_CREATE "新建一个窗口"

  26. CreateWindow() 返回

  27. ShowWindow()

  28. WM_SHOWWINDOW "发送本消息给一个窗口,以便隐藏或显示该窗口"

  29. WM_WINDOWPOSCHANGING "本消息会发送给那些大小和位置(Z_Order)将被改变的窗口,以调用SetWindowPos函数或其它窗口管理函数"

  30. WM_ACTIVATEAPP "窗口进程激活状态改动,正被激活的窗口属于不同的应用程序 "

  31. WM_NCACTIVATE "本消息发送给某窗口,在窗口的非客户区被激活时重绘窗口"

  32. WM_GETICON "本消息发送给某个窗口,用于返回与某窗口有关联的大图标或小图标的句柄(一般收到多个,用于获取不同大小的图标)"

  33. WM_ACTIVATE "一个窗口被激活或失去激活状态"

  34. WM_IME_SETCONTEXT "应用程序的窗口激活时,系统将向应用程序发送WM_IME_SETCONTEXT消息,输入焦点转移到了某个窗口上,注:输入法相关"

  35. WM_IME_NOTIFY "可使用WM_IME_NOTIFY消息来通知关于IME窗口状态的常规改变,注:输入法相关,IME窗口发生了改变"

  36. WM_SETFOCUS "将焦点转向一个窗口"

  37. WM_NCPAINT "当窗口框架(非客户区)必须被被重绘时,应用程序发送本消息给该窗口"

  38. WM_ERASEBKGND "当一个窗口的背景必须被擦除时本消息会被触发(如:窗口大小改变时)"

  39. WM_WINDOWPOSCHANGED "本消息会发送给那些大小和位置(Z_Order)已被改变的窗口,以调用SetWindowPos函数或其它窗口管理函数"

  40. WM_SIZE "改变一个窗口的大小"

  41. WM_MOVE "移动一个窗口"

  42. ShowWindow() 返回

  43. UpdateWindow()

  44. WM_PAINT "窗口重绘"

  45. UpdateWindow() 返回

  46. WM_GETICON "本消息发送给某个窗口,用于返回与某窗口有关联的大图标或小图标的句柄(一般收到多个,用于获取不同大小的图标)"

  47. // 进入消息循环

  48. WM_TIMER "发生了定时器事件"

  49. WM_KEYUP "当一个非系统按键被释放弹起时(<ALT>键没有被按下),会发送本消息给拥有键盘焦点的窗口"

  50. WM_TIMER "发生了定时器事件"

  51. WM_SYSKEYDOWN "当用户按住<ALT>键的同时又按下其它键时,发送本消息给拥有焦点的窗口",

  52. WM_SYSCOMMAND "当用户选择一条系统菜单命令、用户最大化或最小化或还原或关闭时,窗口会收到本消息"

  53. WM_CLOSE "用户关闭窗口时会发送本消息,紧接着会发送WM_DESTROY消息"

  54. WM_WINDOWPOSCHANGING "本消息会发送给那些大小和位置(Z_Order)将被改变的窗口,以调用SetWindowPos函数或其它窗口管理函数"

  55. WM_WINDOWPOSCHANGED "本消息会发送给那些大小和位置(Z_Order)已被改变的窗口,以调用SetWindowPos函数或其它窗口管理函数"

  56. WM_NCACTIVATE "本消息发送给某窗口,在窗口的非客户区被激活时重绘窗口"

  57. WM_ACTIVATE "一个窗口被激活或失去激活状态"

  58. WM_ACTIVATEAPP "窗口进程激活状态改动,正被激活的窗口属于不同的应用程序 "

  59. WM_KILLFOCUS "使一个窗口失去焦点"

  60. WM_IME_SETCONTEXT "应用程序的窗口激活时,系统将向应用程序发送WM_IME_SETCONTEXT消息,输入焦点转移到了某个窗口上,注:输入法相关"

  61. WM_IME_NOTIFY "可使用WM_IME_NOTIFY消息来通知关于IME窗口状态的常规改变,注:输入法相关,IME窗口发生了改变"

  62. WM_DESTROY "销毁一个窗口"

  63. WM_NCDESTROY "本消息通知某窗口,非客户区正在销毁"

  64. WM_CLOSE->WM_DESTROY->WM_QUIT

  65. WM_CREATE是所有窗口都能响应的消息,表明本窗口已经创建完毕(可以安全的使用这个窗口了,例如在它上面画控件等)。在响应WM_CREATE消息

  66. 响应函数的时候,对话框及子控件还未创建完成,亦是说只是通知系统说要开始创建窗口啦,这个消息响应完之后,对话框和子控件才开始创建。

  67. 因此在此消息响应函数中无法对控件进行修改和初始化。

  68. WM_INITDIALOG消息是对话框才能收到的消息,表明对话框及其所有子控件都创建完毕了。这个状态肯定是在调用显示对话框的函数之前,因此

  69. 可以在WM_INITDIALOG消息响应函数中添加对编辑框控件的初始化和修改。

  70. ==========================================

  71. 不要被MFC干扰了,MFC封装了太多的东西,心里想着API的执行顺序就行了。

  72. 所有窗口都是在注册窗口类之后调用CreateWindowEx来创建的,创建成功之后(HWND有效但CreateWindowEx尚未返回)系统自动发送WM_CREATE

  73. 消息,所以你的OnCreate将被执行,在这里窗口已经创建成功了,你可以安全地创建各种子窗口。

  74. --------

  75. 应用程序中处理消息的顺序(转)

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

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

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

  79. 然后调用WindowProc()函数

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

  81. 4.OnWndMsg() 该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息

  82. 响应函数,对于WM_NOTIFY消息

  83. 调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜

  84. 索类的消息映像,以找到一个

  85. 能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则

  86. 把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数

  87. 5.OnCommand() 该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明

  88. 该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;

  89. 如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()就会调用OnCmdMsg()函数

  90. 6.OnCmdMsg() 根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的

  91. 传递命令消息和控件通知。

  92. 例如:如果拥有该窗口的类是一个框架类,则命令和通知消息也被传递到视图和文档类,并为该

  93. 类寻找一个消息处理函数

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

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

  96. (可以设置窗口风格等等)

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

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

  99. 最小尺寸

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

  101. 即将被创建

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

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

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

  105. 发生变化

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

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

  108. 创建

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

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

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

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

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

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

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

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

  117. 3.OnCreate() 消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建,窗口上的控件还未初始化完成,因此一些初始化代码最好不要放在这里

  118. 4.OnSize() 消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化,OnSIze可能会在OnCreate之前调用,因此要判断此时控件是否存在

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

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

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

  122. 或者是创建新控件 对话框类已经构造,但是对话框还没有显示出来的时候

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

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

  125. 的颜色

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

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

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

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

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

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

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

  133. 打开无模式对话框的顺序

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

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

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

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

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

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

  140. 只有清楚的了解应用程序的执行顺序,才能在编写代码的时候知道,在什么时候应该执行什么,以及在什么地方该处理什么!

mfc编程消息机制中消息汇总相关推荐

  1. iOS的消息机制和消息转发

    1.消息机制 RunTime简称运行时.就是系统在运行的时候的一些机制,其中最主要的是消息机制. 对于C语言,函数的调用在编译的时候会决定调用哪个函数( C语言的函数调用请看这里 ).编译完成之后直接 ...

  2. linux关于消息队列中消息的大小的限制

    在消息队列中,例如函数msgsnd(int msqid, const void* msgp, size_t msgsz, int msgflg);这个函数调用的时候,msgsz最大只能为8192,也就 ...

  3. mfc大观之五、六(消息机制和消息运行)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 写过windows程序的朋友都知道,win32主要是利用消息进行界面的编写的.那么在mfc中, ...

  4. linux的消息机制,linux消息机制的过程是什么啊,请赐教

    LINUX的安装过程很简单,按照它的提示进行就可以了.重点就是分区那里.通常我们使用双系统,那样我们在LINUX分区的时候不要把WIN分区跟格掉就好,然后要记得分一个SWAP分区,然后根据您的需要进行 ...

  5. c语言linux消息机制,linux消息机制的过程是什么啊,请赐教

    LINUX的安装过程很简单,按照它的提示进行就可以了.重点就是分区那里.通常我们使用双系统,那样我们在LINUX分区的时候不要把WIN分区跟格掉就好,然后要记得分一个SWAP分区,然后根据您的需要进行 ...

  6. Android 进阶14:源码解读 Android 消息机制( Message MessageQueue Handler Looper)

    不要心急,一点一点的进步才是最靠谱的. 读完本文你将了解: 前言 Message 如何获取一个消息 Message.obtain() 消息的回收利用 MessageQueue MessageQueue ...

  7. 浅析Android中的消息机制

    在分析Android消息机制之前,我们先来看一段代码: [java] view plaincopy public class MainActivity extends Activity impleme ...

  8. 【转】编程思想之消息机制

    从一个剧情开始 路遥的<平凡的世界>因为翻拍成电视剧,又再次火起来了!我们就从这里开始吧,其小说是以这样一个场景开头的: 在一个半山腰县立高中的大院坝里,在一个校园内的南墙根下,按班级排起 ...

  9. 重温Android中的消息机制

    引入: 提到Android中的消息机制,大家应该都不陌生,我们在开发中不可避免的要和它打交道.从我们开发的角度来看,Handler是Android消息机制的上层接口.我们在平时的开发中只需要和Hand ...

最新文章

  1. 校园二手平台的开发和利用
  2. 这大概是一篇最简单最清晰的Java JVM执行流程
  3. (五)python3 只需3小时带你轻松入门—— 逻辑运算符
  4. android intent传对象,startActivityForResult使用, setResult(RESULT_OK)使用,getArguments(),
  5. Delphi实现带有格式的Excel导出功能
  6. 无熟人难办事?—迪米特法则
  7. 如何在Hadoop2上远程调试MapReduce
  8. ubuntu16.04中安装MESA 17.3.3
  9. javascript 弹出窗口中是否显示地址栏
  10. 8254跑马灯c语言程序,C语言笔记-基于C语言实现的流水跑马灯
  11. linux下下载文件到谷歌云盘,如何使用wget下载谷歌云端硬盘里的文件
  12. Rem布局案例讲解。
  13. 《软件随想录》读书笔记
  14. C语言----文件存储
  15. 京东到家话费券系统NIO实战
  16. 十六进制转十进制(栈实现)
  17. 解决 yarn install报错node-sass: Command failed/使用nvm use出现status 145:the directory is not empty
  18. 高斯,数据科学家最爱的男人(我们不是GAY!)
  19. Date,LocalDateTime类型,获取今年开始时间,获取去年的今天。
  20. 常见的加解密及编码总结

热门文章

  1. 网上学c语言推荐课程网站,C语言教学网络课程网站论文
  2. linux抓取网络信息,Linux获取所有网口及其详细信息
  3. mpi tcp连接报错_关于WinCC与真实PLC之间的TCP/IP连接问题-工业支持中心-西门子中国...
  4. 中国深圳,600架无人机的盛典!
  5. android 置顶窗口位置,Android 滑动悬浮置顶指南
  6. fpga如何约束走线_如何正确的约束时钟—Vivado优化到关键路径
  7. 历史数据如何处理_数据库表数据量大读写缓慢如何优化(1)【冷热分离】
  8. 贝叶斯分类器_python机器学习API介绍10:多项式贝叶斯分类器
  9. html2canvas 截图div_H5快照截图[html2canvas]+图片下载
  10. python是不是高级语言_Python是什么语言?老男孩教育带你了解!