
Win32消息与消息队列
文章平均质量分 54
jian_chi
这个作者很懒,什么都没留下…
展开
-
消息和消息队列(About Message and Message Queues)
消息和消息队列(About Message and Message Queues) 不像MS-DOS程序,Win32程序是事件驱动(event-driven)的。Win32程序不会产生显函数调用(像C运行库调用)来获取输入。相反,Win32程序等待系统把输入传递给它。 系统会把程序的所有输入传递给应用程序中各种窗口中。每个窗口都有一个叫窗口处理过程(window procedu翻译 2012-09-10 22:40:58 · 620 阅读 · 0 评论 -
消息过滤(Message Filtering)
消息过滤(Message Filtering) 通过调用GetMessage和PeekMessage函数,应用程序可以指定一个消息过滤器,从消息队列中获取特定的消息而忽略其它的消息。这个过滤器是一个消息标识符的范围(通过指定第一个和最后一个标识符),或者一个窗口句柄,又或者两者都是。GetMessage和PeekMessage函数利用消息过滤器从队列中选择消息。如果应用程序必须在翻译 2012-09-22 01:05:25 · 1894 阅读 · 0 评论 -
消息处理(Message Handling)
消息处理(Message Handling) 应用程序必须移除并处理被发布到线程消息队列中的消息。一个单线程应用程序通常利用消息循环在WinMain函数中,移除并发送消息到合适的窗口过程进行处理。多线程应用程序可以在每个创建窗口的线程里包括一个消息循环。接下来的部分描述了消息队列如何工作以及解释了窗口过程的地位: 消息循环(Message Loop)翻译 2012-09-16 00:23:41 · 812 阅读 · 0 评论 -
消息发送(Message Routing)
消息发送(Message Routing) 系统利用两种方法发送消息到窗口过程函数:1.把消息发送到一个先进先出(First-in,First-out)的队列,这个队列是系统定义的临时存放消息的内存对象。2.直接把消息传递给窗口过程函数。 被发送给消息队列的消息是队列消息。它们主要是用户通过鼠标和键盘输入引起的消息,例如WM_MOUSEMOVE,WM_LBUTTON翻译 2012-09-15 10:26:42 · 1158 阅读 · 0 评论 -
发送消息(Sending a Message)
发送消息(Sending a Message) SendMessage函数被用来直接发送消息到一个窗口过程。SendMessage函数调用一个窗口过程并等待这个窗口过程处理消息然后返回一个结果。 一个消息可以被发送给系统中的任何窗口,只需要一个窗口句柄。系统利用这个句柄来决定哪个窗口过程应该接收这个消息。 在处理一个可能由其他线程发送的消息之前,一个窗口过程应该首先调翻译 2012-09-29 18:42:17 · 1445 阅读 · 0 评论 -
发布消息(Posting a Message)
发布消息(Posting a Message) 你可以利用PostMessage函数把一个消息发布到一个消息队列。PostMessage函数把一个消息放到一个线程消息队列的末端,然后会立即返回,而不用等待线程处理完这个消息。这个函数的参数包括一个窗口句柄,一个消息标识符,和两个消息参数。系统会把这些参数复制到一个MSG结构中,填充结构的time和pt成员变量,并把这个结构发到消息队列中。翻译 2012-09-29 18:13:49 · 844 阅读 · 0 评论 -
创建消息循环(Creating a Message Loop)
创建消息循环(Creating a Message Loop) 系统自动为每个线程创建一个消息队列。如果一个线程创建一个或多个窗口,那么不需提供一个消息循环。这个消息循环从线程消息队列中获取消息并把这些消息发配给合适的窗口过程。 因为系统为程序中单个的窗口指定消息,一个线程必须至少创建一个窗口在开始它的消息循环之前。大部分Win32程序包含只一个线程来创建窗口。一翻译 2012-09-28 17:58:01 · 1339 阅读 · 0 评论 -
检查消息队列(Examining a Message Queue)
检查消息队列(Examining a Message Queue) 一个应用程序需要检查来自于线程消息循环之外的一个线程消息队列的内容。例如,如果应用程序的窗口过程正在执行一个很长的绘画操作,但是你可能想要用户可以中断这个操作。除非你的应用程序可以在鼠标和键盘消息输入时定期检查消息队列,否则它将不会响应用户输入直到这个操作结束。这个情况发生的原因是在线程消息队列中,DispatchMes翻译 2012-09-28 23:19:11 · 930 阅读 · 0 评论 -
消息死锁(Message Deadlocks)
消息死锁(Message Deadlocks) 当一个线程调用SendMessage函数给其他线程发送消息时,这个线程不能继续执行,只到接收消息的窗口过程返回。如果接收消息的线程在处理消息时放弃了控制,发送消息的线程不能继续执行,因为这个线程在等待SendMessage函数返回。如果接收消息的线程与发送消息的线程都依附于同样的消息队列,那么这可以引起应用程序的死锁。 要注意的是翻译 2012-09-27 12:22:47 · 1718 阅读 · 0 评论 -
广播消息(Broadcasting Messages)
广播消息(Broadcasting Messages) 每个消息是由一个消息标识符和两个参数,wParam和lParam组成。消息标识符是一个唯一值指定消息目的。两个参数提供额外的信息,但是wParam参数通常是一个类型值,可以提供更多的关于消息的信息。 一个消息广播仅仅是为系统中多个接收者发送消息。为了从一个应用程序中广播消息,利用BroadcastSystemMessage翻译 2012-09-28 00:07:37 · 2764 阅读 · 0 评论 -
消息类型(Message Types)
消息类型(Message Types) 系统定义消息(System-Defined Message) 当需要和应用程序通信时,系统会发送一个系统定义的消息。系统利用这些消息控制应用程序的操作,并且提供输入和其它信息让应用程序处理。应用程序也可以发送系统定义的消息。应用程序通常利用这些消息来控制窗口控件的操作,这些窗口控件是事先注册的窗口类创建的。 每翻译 2012-09-10 23:48:50 · 6290 阅读 · 0 评论 -
窗口消息(Windwo Messages)
窗口消息(Windwo Messages) 系统以消息的形式把输入传递给窗口处理过程函数。消息是由系统和应用程序共同产生的。系统会在每个输入事件发生时产生一个消息,例如用户打字,移动鼠标或点击控件(像滚动条)事件。当应用程序对系统带来改变时,系统也会产生消息来响应这种改变,例如应用程序改变系统字体资源或调整其窗口尺寸。应用程序也会产生消息指挥其窗口执行任务或和其它程序窗口进行通信。翻译 2012-09-10 22:42:47 · 717 阅读 · 0 评论 -
发布和发送消息(Posting and Sending Messages)
发布和发送消息(Posting and Sending Messages) 任何应用程序都可以发布和发送消息。像系统一样,应用程序通过复制消息到消息队列来发布消息,通过把消息作为参数传递给窗口过程来发送消息。应用程序可以利用PostMessage函数来发布消息。应用程序也可以通过调用SendMessage,BroadcastSystemMessage,SendMessageCall翻译 2012-09-22 16:17:25 · 1170 阅读 · 0 评论