GetMessage 是只获得本窗口的消息呢,还是把所有的消息都抓了进来?

来源:百度知道 编辑:UC知道 时间:2024/05/23 15:51:24
如果全把 消息抓进来,那么
DispatchMessage 是只管把消息分派到自己的窗口函数上来么? 还是还管着分派其他程序的消息?

系统把消息送入程序的消息队列中GetMessage的意思就是从中取出一条消息,所以是只管自己的窗口消息。

GetMessage读取当前线程的消息队列中的第一个消息,读完后既从队列清除之。
PeekMessage,是读取线程队列的消息,但是不清除。
GetMessage跟窗口无关,不管在那里调用,都是读取所在线程的消息队列,(如果是工作者线程没有消息队列的话,执行GetMessage,系统自动就为当前线程创建一个消息队列)。

一般GetMessage执行完后,会调用DispatchMessage ,用来分发消息,也就是把消息送到对应的窗口去处理。注意看MSG消息结构中有个hwnd成员,就是窗口句柄,分发就是根据它来执行的。

窗口的消息并不全部都从 GetMessage读取分发来的,例如SendMessage就是直接发往窗口的消息处理函数——也就是调用