windows消息队列

windows消息队列

ID:39470104

大小:80.00 KB

页数:16页

时间:2019-07-04

windows消息队列_第1页
windows消息队列_第2页
windows消息队列_第3页
windows消息队列_第4页
windows消息队列_第5页
资源描述:

《windows消息队列》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、windows消息队列一节详细描述消息和消息队列以及如何在你程序中使用他们。关于消息和消息队列与传统的应用程序不同,MicrosoftWindows应用程序并不显式地用一个函数的调用(如c运行库)来获取输入,而是,等待windows系统把输入传给它们。windows系统把应用程序的所有输入传给应用程序的窗口,每个窗口都有一个称之为窗口过程的函数.当窗口有输入时windows系统要调用它,窗口过程处理输入并把控制返回windows系统。有关窗口过程,参见“窗口过程”。这一章讲述消息及消息队列,并说明在

2、应用程序中如何使用它们。消息windows系统以消息的形式把输入传给窗口过程,消息是由windows系统或应用程序产生的.windows系统对每一个输入事件都要产生消息,例如,用户按键盘、移动鼠标或单击一个滚动条控制框。windows系统为了响应应用程序给系统带来的变化也会产生消息,比如应用程序改变了系统字体资源池或是改变了一个窗门的大小。应用程序可通过产生消息指导它自己的窗口来完成某个任务,或是与其它应用程序的窗口进行通信。windows系统把消息发送给窗口过程.窗口过程有四个参数:窗口句柄、消息

3、标识以及两个叫做消息参数的32位值。窗口句柄决定消息将发送到哪—个窗口,windows系统则用它来确定向哪一个窗口过程发送消息。消息标识是一个命名的常量,由它来标明消息的目的。如果窗口过程接收到一条消息,它就通过消息标识来决定如何处理这条消息。例如,消息标识WM_PAINT通知窗口过程,窗口的客户区被改变了,需要重画。消息参数指定窗口过程在处理消息时所用的数据或数据的位置,消息的意图及数值取决了消息本身。消息参数可以是一个整数、紧缩的位标志、一个含有附加数据结构的指针等等。如果消息不使用消息参数,一

4、般就都设置成NULL、窗口过程必须检查消息标识以确定如何解释消息参数。消息路由windows系统用两种方式向窗口过程发送消息:把消息投递到一个先进先出的消息队列中,它是一个系统定义的内存块用于临时存储消息;或是把消息直接发给窗口过程。投递到消息队列中的消息叫排队消息,它们主要是用户通过鼠标或键盘的输入结果.如WM_MOUSEMOVE,WM_LBUTTONDOWN,WM_KEYDOWN,andWM_CHAR消息。其它的排队消息包括定时器、绘制和退出消息:WM_TIMER,WM_PAINT,andWM_

5、QUIT。所有直接发送到窗口过程的其它消息称之为非队列消息。排队消息windows系统在同一时间可显示多个窗口,要发送鼠标和键盘输入到相应的窗口,windows系统要用到消息队列,它要管理一个系统消息队列和任意数目线程消息队列,每一个队列对应于一个线程。不管什么时候,只要用户移动鼠标或是敲键盘.鼠标或键盘的设备驱动器都要把输入转换成消息,并把它们放到系统消息队列中去。windows从系统队列中每次移走一条消息,确定目的窗口,再把它们投递到创建目的窗口的线程的消息队列中,线程消息队列接收所有由该线程创

6、建的窗口的鼠标和键盘消息。线程从它的队列中移走消息并指导windows系统将它们发送到相应的窗口过程进行处理。有关线程,参见“进程和线程”。WM_PAINT消息有点特别,windows系统总是把这条消息放在消息队列的最后,这样可保证窗口按先进先出次序接收它的输入消息,WM_PAINT消息被保持在队列中,只有在队列中没有其它消息时才发送到窗口过程。同一个窗口的多个WM_PAINT消息被合并成一个WM_PAINT消息,把客户区所有无效部分合并成一个区域.合并WM_PAINT消息节约了窗口必须重画客户区内

7、容的时间。系统向线程消息队列投递消息是通过填充一个MSG结构,再把它复制到消息队列中,MSG结构中的信息包括接收消息的窗口句柄、消息标识、两个消息参数、消息时间以及鼠标的位置,线程可把消息投递到它自己的消息队列中或是通过函数PostMessage和PostThreadMessage把消息投递到其它线程的队列中去。应用程序可通过函数GetMessage从它的队列中移走一条消息,应用程序还可用函数PeekMessage来检查队列中的某个消息但并不移走它,这个函数用有关这条消息的信息填充MSG结构。把一条

8、消息从它的队列中移走后.应用程序可用函数DispatchMessage指导windows系统把这条消息发送到窗口过程进行处理。DispatchMessage利用前面调用函数GetMessage或PeekMessage时填充的MSG结构的指针,把窗口句柄、消息标识及两个消息参数传给窗口过程,但它并不传送时间或鼠标光标的位置.应用程序可以在处理一条消息时,通过调用函数GetMessageTime和GetMessagePos来获取这些信息。一个线程可以用函数WaitMess

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。