4_第四章 MFC的消息映射机制_第1页
4_第四章 MFC的消息映射机制_第2页
4_第四章 MFC的消息映射机制_第3页
4_第四章 MFC的消息映射机制_第4页
4_第四章 MFC的消息映射机制_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.1消息类别描述4.2MFC消息映射原理4.3MFC程序处理消息的路径4.4自定义消息处理,第四章MFC的消息映射机制,4.1消息类别描述(1),MSG结构typedefstructtagMSGHWNDhwnd;/可以处理消息的窗口句柄UINTmessage;/消息类别的唯一标志WPARAMwParam;/额外参数WPARAMlParam;/额外参数DWORDtime;/消息投递的时间POINTpt;/鼠标位置MSG;,4.1消息类别描述(2),窗口消息:与创建窗口、绘制窗口、移动窗口和销毁窗口等操作窗口的动作有关。窗口消息的格式:窗口消息的产生途径:与窗口交互产生系统产生的窗口消息,4.1消息类别描述(3),命令消息:与处理用户的某个请求或执行用户的指令有关。命令消息的格式:命令消息的产生途径:选择菜单项工具栏按钮加速键程序产生命令解释命令的宏HIGHWORD(wParam)LOWWORD(wParam)组装命令的宏MAKEPARAM(低16位,高16位),4.1消息类别描述(4),控件消息:与控件窗口中某个事件的发生有关。命令消息的格式:仿窗口消息格式仿命令消息格式单独控件消息格式,4.2MFC消息映射原理(1),MFC应用程序处理消息的阶段利用应用程序类的Run()函数从消息队列中读取消息,并发送到目标对象主框架窗口对象。(P112图4.1):TranslateMessage():将原始键码翻译成键字符。:DispatchMessage():将消息直接发送个应用程序的主框架窗口函数。主窗口对象利用MFC消息机制寻找消息处理函数。,4.2MFC消息映射原理(2),发送/寄送消息给窗口类:SendMessage()函数:直接调用窗口函数(或窗口进程),知道窗口进程处理完该消息并返回一个标志,应用程序才继续执行。:PostMessage()函数:把消息发送到拥有目标窗口的应用程序消息队列中,只有当有时间处理该消息时,应用程序才从消息队列中检索出该消息,并发送个指定窗口,同时从消息队列中删除该消息。二者的区别(P114图4.2)处理延时函数返回反馈信息通常鼠标和键盘消息采用Post方式,其它采用Send方式,4.2MFC消息映射原理(3),MFC的CWnd类发送/寄送消息给窗口类CWnd:SendMessage()函数CWnd:PostMessage()函数如何检索消息队列中的消息:PeekMessage()函数:窥视消息队列,查询指定的消息是否在队列中;看完后,是否从队列中删除该消息,取决于标志wReMoveMsg。:GetMessage()函数:当没有一个新消息到达队列时,该函数一直阻塞(等待状态),一旦有新消息,则从队列中删除该消息,并返回此消息。,4.2MFC消息映射原理(4),MFC的消息映射表:在每个能够接受和处理消息的类中,定义一个消息和消息处理函数静态对照表。将该类能处理的所有消息及其对应的消息处理函数的地址都罗列在该表中。应用程序只需要查询该表就可以实现消息的处理。定义MFC的消息映射表DECLARE_MESSAGE_MAP()BEGIN_MESSAGE_MAP(处理消息的类名,基类名)和END_MESSAGE_MAP(),4.2MFC消息映射原理(5),MFC应用程序框架寻找消息处理函数的路径(P124图4.3)应用程序类的Run()函数调用:DispatchMessage()函数把消息发送个全局函数AfxWndProc();AfxWndProc()接受消息,并寻找消息的目标窗口CWnd对象(已知);调用AfxCallWndProc()函数存储消息的标志符和参数调用目标窗口对象的虚函数WndProc(),将发送消息给OnWndMsg()函数;OnWndMsg()函数负责将消息非类为窗口消息,命令消息或控件消息,按照不同的消息类别交给不同的消息处理函数处理,并接受反馈结果。窗口消息:调用OnWndMsg(),搜索目标窗口类或基类的消息映射表,判断该类或其基类能否处理该消息。如否,则把消息交给DefWindowProc()函数进行默认处理。命令消息:调用OnCommand()处理,否则调用OnCmdMsg()搜索规定路径相应类的消息映射表。控件消息:调用OnNotify()处理,否则调用OnCmdMsg()搜索规定路径相应类的消息映射表。,4.3MFC程序处理消息的路径,如何处理窗口消息:只能由窗口类(框架类和视图类)接受和处理。(P125图4.4)如何处理命令消息:按照MFC规定的路径搜索各个类的消息映射表,找到相应的处理函数就执行并返回;如果路径搜索完,没有相应的处理函数,不执行任何函数,相应界面变灰。(P131图4.5和图4.6)如何处理控件消息:把消息交给控件窗口所对应的类处理;如果不能处理,调用OnCmdMsg()函数搜索控件的父窗口能否处理,否则该控件变灰。(P132图4.7),4.4自定义消息处理,Windows系统保留了从0WM_USER之间的消息,自定义消息可以映射为WM_USER+1到WM_USER+oX7FFF之间的值。自定义静态窗口消息在类的源文件中定义消息在类的头文件中声明消息处理函数在类的消息映射表中加入映射项在类的源文件中实现消息处理函数通过se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论