- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Windows程序设计之消息与消息队列
第二章 消息与消息队列 与传统的应用程序不同,Windows应用程序并不显式地用一个函数的调用来(如getchar)或的输入,而是等待Windows系统把输入传给它们。 Windows系统把应用程序的所有输入传入给应用程序窗口,每一个窗口都有一个称作窗口过程的函数,当窗口有输入时Windows系统要调用它,窗口过程处理输入并把控制返回给Windows。Windows系统以消息的形式把输入传给窗口过程,消息是由Windows系统或应用程序产生的,Windows系统对于每一个输入事件都要产生消息-例如键盘、鼠标的动作。Windows系统为了响应应用程序给系统带来的变化也会产生消息-例如应用程序改变了系统字体或改变了一个窗口的大小。应用程序可以通过产生消息指导它自己的窗口来完成某项任务,或是与其他应用程序的窗口进行通信。 消息有六个参数: typedef struct tagMSG {HWND? hwnd; UINT?? message; WPARAM wParam; LPARAM lParam; DWORD? time; POINT? pt; } MSG; * 目的窗口(hwnd): 接收消息的窗口,也就是那一个窗口的窗口过程将被调用。 消息标志(message): 一个命名的常量,用来标志消息的目的,也就是消息的含义。如果窗口过程收到一条消息,它就通过消息标志来决定如何处理这条消息。 消息的附加内容,具体的含义取决于具体消息标志message。参数分为高低位。消息参数可以是一个整数、紧缩的位标志、一个含有附加数据结构的指针等等。 参数1(wParam): 参数2(lParam): 消息的附加内容,具体的含义取决于具体消息标志message。参数分为高低位。消息参数可以是一个整数、紧缩的位标志、一个含有附加数据结构的指针等等。 消息发出的时间。 分发时间(time): 光标位置(pt): 消息发生时鼠标光标的位置。以设备坐标系定位。 * 排队消息: Windows系统在同一时刻可以显示多个窗口,要发送鼠标和键盘输入到相应的窗口,Windows要用到消息队列,它要管理一个系统消息队列和任意数目的线程消息队列,每一个队列对应一个线程。 无论什么时候,只要用户移动鼠标或敲键盘,鼠标或键盘的设备驱动程序都要把输入转换成消息,并把它们放到系统消息队列中。Windows系统从系统 构造消息参数的宏:MAKELPARAM、 MAKEWPARAM 析取消息参数的宏:HIWORD、LOWORD 消息路由 (route): 消息路由的含义是消息在系统中传播的途径。 Windows系统用两种方式向窗口过程发消息:把消息投递到一个先进先出的消息队列中(线程消息队列),它是一个系统定义的内存块用于临时存储消息;或是把消息直接发给窗口过程。投递到消息队列中的消息叫做排队消息,主要是用户通过鼠标或键盘的输入结果,如WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_KEYDOWN, WM_CHAR等。其它的排队消息包括定时器、绘制和退出消息:WM_TIMER, WM_PAINT, WM_QUIT。所有直接发送到窗口过程的其它消息称作非排队消息。 * 消息队列中每次移走一条消息,确定目的窗口,再把它投递到创建目的窗口的线程的消息队列中,线程消息队列从它的接收所有由该线程创建的窗口的鼠标和键盘消息。线程从它的队列中移走消息并指导Windows系统将它们发送到相应的窗口过程进行处理。 比较特别的是WM_PAINT消息,Windows系统总是把这条消息放在消息队列的最后,这样可以保证窗口按先进先出次序接收它的输入消息,WM_PAINT消息被保留在消息队列中,直到队列中没有其他消息时才发送到窗口过程。同一个窗口的多个WM_PAINT消息被合并成一个,并把客户区的所有无效部分合并成一个区域,合并WM_PAINT消息节约了窗口必须重画客户区内容的时间。 非排队消息: 非排队消息直接发送到目标窗口过程,不通过系统消息队列和线程消息队列。Windows系统一般通过发送非排队消息把影响某窗口的事件通知窗口。例如,如果用户激活一个新的应用程序窗口,Windows就会向该窗口发送一系列的消息。非排队消息也有可能发生在应用程序调用一个Windows系统函数时,例如在应用程序调用函数SetWindowPos来移动一个窗口后,Windows系统发送一条WM_WINDOWPOSCHANGED消息。 应用程序使用SendMessage, SendNotifyMessage, SendDlg
您可能关注的文档
最近下载
- 市政基础设施工程施工现场质量管理标准化.doc
- 手机照片视频误删后的恢复方法.doc VIP
- 一例无法控制大脑的心理咨询案例——以人为中心疗法取向.pdf VIP
- [教你如何制作KTV歌曲VOD歌曲KTV歌曲库.doc VIP
- 照明设计软件:AGI 32二次开发_AGI32数据管理与优化.docx VIP
- 第五届潍坊市职业技能大赛城市管理网格员题库及答案(760题).docx VIP
- 鼻肠管滑脱的应急预案.pptx VIP
- DGT 801系列数字式发电机变压器组保护装置技术说明书.pdf
- 广东省肇庆市怀集县事业单位考试真题每日一练带答案解析(2021年03月02日).docx VIP
- 农村教师公开选调进城考试模拟试题1(初中地理·附参考答案).docx
文档评论(0)