一个windows程序有winapi程序还有个消息处理程序~
消息处理程序是从消息队列取消息然后呼叫消息处理程序~
我想问你比如我在窗口中鼠标对窗口产生的动作是首先放入消息队列~
比如我鼠标左键点一下右键点一下~是先把左键放入对列然后取出消息进行处理然后把右键放入对列然后取出消息队列~还是一直等待用户的动作等用户没有动作然后把用户产生所有的动作都放到消息队列~然后用
getmessage这个函数取出消息进行处理呢????
消息处理程序是从消息队列取消息然后呼叫消息处理程序~
我想问你比如我在窗口中鼠标对窗口产生的动作是首先放入消息队列~
比如我鼠标左键点一下右键点一下~是先把左键放入对列然后取出消息进行处理然后把右键放入对列然后取出消息队列~还是一直等待用户的动作等用户没有动作然后把用户产生所有的动作都放到消息队列~然后用
getmessage这个函数取出消息进行处理呢????
消息队列缺省的大小可以放96个消息(从 MFC的源代码里头查吧).做个试验:
一个对话框,上面有2个按钮,Button1,Button2.
OnButton1()
{
Sleep 5 秒
}OnButton2()
{
MessageBox("...");
}你按Button1,马上再按Button2,看看现象吧。
每个应用程序,不管你是多文档的,单文档的,还是对话框的,都有一个主线程。
这个主线程接受所有的键盘,鼠标消息。并且分发给各个窗口。或者自己处理。
PreTranslateMessage就是干这个事情的,DispatchMessage发给窗口。一个有窗口(图形界面GUI)的应用程序,它的UI消息都被这个主线程管理并且分发。
当然除非你创件另一个线程,在那个县城里头再创建窗口等等,那就不是这个
主线程管了。一个线程(比如主线程)有他的消息队列。即使这个线程没有相应的窗口(比如工作线程),
它也有消息队列。
PostThreadMessage(iThreadID, uiMsg, wParam, lParam);向线程发消息。
PeekMessage()察看队列里面的消息。