Windows程序设计之消息与消息队列

Windows程序设计之消息与消息队列

ID:38860761

大小:326.32 KB

页数:13页

时间:2019-06-20

Windows程序设计之消息与消息队列_第1页
Windows程序设计之消息与消息队列_第2页
Windows程序设计之消息与消息队列_第3页
Windows程序设计之消息与消息队列_第4页
Windows程序设计之消息与消息队列_第5页
资源描述:

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

1、第二章消息与消息队列与传统的应用程序不同,Windows应用程序并不显式地用一个函数的调用来(如getchar)或的输入,而是等待Windows系统把输入传给它们。Windows系统把应用程序的所有输入传入给应用程序窗口,每一个窗口都有一个称作窗口过程的函数,当窗口有输入时Windows系统要调用它,窗口过程处理输入并把控制返回给Windows。Windows系统以消息的形式把输入传给窗口过程,消息是由Windows系统或应用程序产生的,Windows系统对于每一个输入事件都要产生消息-例如键盘、鼠标的动作。Windows系统为了响应应用程序给系统带来的变化也会产生消息-例如

2、应用程序改变了系统字体或改变了一个窗口的大小。应用程序可以通过产生消息指导它自己的窗口来完成某项任务,或是与其他应用程序的窗口进行通信。消息有六个参数:typedefstructtagMSG{HWNDhwnd;UINT  message;WPARAMwParam;LPARAMlParam;DWORD time;POINT pt;}MSG;目的窗口(hwnd):接收消息的窗口,也就是那一个窗口的窗口过程将被调用。消息标志(message):一个命名的常量,用来标志消息的目的,也就是消息的含义。如果窗口过程收到一条消息,它就通过消息标志来决定如何处理这条消息。消息的附加内容,具体

3、的含义取决于具体消息标志message。参数分为高低位。消息参数可以是一个整数、紧缩的位标志、一个含有附加数据结构的指针等等。参数1(wParam):参数2(lParam):消息的附加内容,具体的含义取决于具体消息标志message。参数分为高低位。消息参数可以是一个整数、紧缩的位标志、一个含有附加数据结构的指针等等。消息发出的时间。分发时间(time):光标位置(pt):消息发生时鼠标光标的位置。以设备坐标系定位。排队消息:Windows系统在同一时刻可以显示多个窗口,要发送鼠标和键盘输入到相应的窗口,Windows要用到消息队列,它要管理一个系统消息队列和任意数目的线程消

4、息队列,每一个队列对应一个线程。无论什么时候,只要用户移动鼠标或敲键盘,鼠标或键盘的设备驱动程序都要把输入转换成消息,并把它们放到系统消息队列中。Windows系统从系统构造消息参数的宏:MAKELPARAM、MAKEWPARAM析取消息参数的宏:HIWORD、LOWORD消息路由(route):消息路由的含义是消息在系统中传播的途径。Windows系统用两种方式向窗口过程发消息:把消息投递到一个先进先出的消息队列中(线程消息队列),它是一个系统定义的内存块用于临时存储消息;或是把消息直接发给窗口过程。投递到消息队列中的消息叫做排队消息,主要是用户通过鼠标或键盘的输入结果,如

5、WM_MOUSEMOVE,WM_LBUTTONDOWN,WM_KEYDOWN,WM_CHAR等。其它的排队消息包括定时器、绘制和退出消息:WM_TIMER,WM_PAINT,WM_QUIT。所有直接发送到窗口过程的其它消息称作非排队消息。消息队列中每次移走一条消息,确定目的窗口,再把它投递到创建目的窗口的线程的消息队列中,线程消息队列从它的接收所有由该线程创建的窗口的鼠标和键盘消息。线程从它的队列中移走消息并指导Windows系统将它们发送到相应的窗口过程进行处理。比较特别的是WM_PAINT消息,Windows系统总是把这条消息放在消息队列的最后,这样可以保证窗口按先进先出

6、次序接收它的输入消息,WM_PAINT消息被保留在消息队列中,直到队列中没有其他消息时才发送到窗口过程。同一个窗口的多个WM_PAINT消息被合并成一个,并把客户区的所有无效部分合并成一个区域,合并WM_PAINT消息节约了窗口必须重画客户区内容的时间。非排队消息:非排队消息直接发送到目标窗口过程,不通过系统消息队列和线程消息队列。Windows系统一般通过发送非排队消息把影响某窗口的事件通知窗口。例如,如果用户激活一个新的应用程序窗口,Windows就会向该窗口发送一系列的消息。非排队消息也有可能发生在应用程序调用一个Windows系统函数时,例如在应用程序调用函数SetW

7、indowPos来移动一个窗口后,Windows系统发送一条WM_WINDOWPOSCHANGED消息。应用程序使用SendMessage,SendNotifyMessage,SendDlgItemMessage来发送消息的。消息环:应用程序必须删除和处理投递到它的线程消息队列中的消息,单一线程的应用程序一般是在它的WinMain函数中使用一个消息环来删除消息,并把消息发送到相应的窗口过程进行处理。具有多线程的应用程序在创建窗口的每一个线程中使用一个消息环。while(GetMessage(&msg,N

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

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

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