一个windows程序有winapi程序还有个消息处理程序~
消息处理程序是从消息队列取消息然后呼叫消息处理程序~
我想问你比如我在窗口中鼠标对窗口产生的动作是首先放入消息队列~
比如我鼠标左键点一下右键点一下~是先把左键放入对列然后取出消息进行处理然后把右键放入对列然后取出消息队列~还是一直等待用户的动作等用户没有动作然后把用户产生所有的动作都放到消息队列~然后用
getmessage这个函数取出消息进行处理呢????

解决方案 »

  1.   

    我认为这两者没有联系,各做各的。对消息的响应是操作系统自己调用其callback函数依次处理,同对消息的处理没有什么关系。
      

  2.   

    左键点一下右键点一下,先把左键的按下消息放进队列,然后把左键的抬起消息放进队列,然后把右键的按下消息放进队列,再把右键的消息放进队列。Windows取消息的时候,从消息队列中依次取出,然后判断是否是自己窗口的,如果不是,就上传给上一级窗口,上一级窗口在判断是否是自己的消息,如果是,就处理,如果不是,就不处理,再传给上一级窗口。依次类推。知道找到属于他的窗口进行处理。
      

  3.   

    所有的消息先到消息队列排队。程序从队列里头取消息处理。
    消息队列缺省的大小可以放96个消息(从 MFC的源代码里头查吧).做个试验:
    一个对话框,上面有2个按钮,Button1,Button2.
    OnButton1()
    {
       Sleep 5 秒
    }OnButton2()
    {
        MessageBox("...");
    }你按Button1,马上再按Button2,看看现象吧。
      

  4.   

    接 4inSky(黑棋子):
    每个应用程序,不管你是多文档的,单文档的,还是对话框的,都有一个主线程。
    这个主线程接受所有的键盘,鼠标消息。并且分发给各个窗口。或者自己处理。
    PreTranslateMessage就是干这个事情的,DispatchMessage发给窗口。一个有窗口(图形界面GUI)的应用程序,它的UI消息都被这个主线程管理并且分发。
    当然除非你创件另一个线程,在那个县城里头再创建窗口等等,那就不是这个
    主线程管了。一个线程(比如主线程)有他的消息队列。即使这个线程没有相应的窗口(比如工作线程),
    它也有消息队列。
    PostThreadMessage(iThreadID, uiMsg, wParam, lParam);向线程发消息。
    PeekMessage()察看队列里面的消息。