miniGUI中的消息队列

来源:互联网 发布:前端js面试题 编辑:程序博客网 时间:2024/06/05 18:26

应用程序必须及时处理投递到它的消息队列中的消息,程序一般在 MiniGUIMain 函数中
通过一个消息循环来处理消息队列中的消息。
消息循环就是一个循环体,在这个循环体中,程序利用 GetMessage  函数不停地从消
息队列中获得消息,然后利用 DispatchMessage  函数将消息发送到指定的窗口,也就是调

用指定窗口的窗口过程,并传递消息及其参数。

在 MiniGUI-Threads 版本中, 每个建立有窗口的 GUI 线程都有自己的消息队列, 而且,
所有属于同一线程的窗口共享同一个消息队列。因此,GetMessage  函数将获得所有与
hMainWnd  窗口在同一线程中的窗口的消息。而在 MiniGUI-Processes  版本中只有一个消
息队列,GetMessage  将从该消息队列当中获得所有的消息,并忽略 hMainWnd  参数。一
个消息队列只需要一个消息循环,不管应用程序有多少个窗口,因为 MSG 消息结构中含有

消息的目标窗口句柄,DispatchMessage 函数就可以把消息发送到它的目标窗口。

DispatchMessage 函数所做的工作就是获取消息的目标窗口的窗口过程,然后直接调用
该窗口过程函数对消息进行处理。
窗口过程是一个特定类型的函数,用来接收和处理所有发送到该窗口的消息。每个控件
类有一个窗口过程,属于同一控件类的所有控件共用同一个窗口过程来处理消息。
窗口过程如果不处理某条消息,一般必须把这条消息传给系统进行默认处理。主窗口过
程通常调用 DefaultMainWinProc 来完成消息的默认处理工作,并返回该函数的返回值。