MFC上说CWinThread可有有消息队列,那它派生于CCmdTarget,岂不是全是WM_COMMAND?
我以为只有CWnd可以有消息队列,因为WM_xxxx(除了WM_COMMAND)只有CWnd才能处理。自己还需要学习啊。顺便问一句,大家都放假了吧?我们居然还要上班。

解决方案 »

  1.   

    线程都可以(但不一定)有消息队列,一般来讲当线程创建一个窗口或者显式调用 GetMessage 的时候,操作系统就会为其创建消息队列。
      

  2.   

    消息队列是线程的而不是窗口的CWnd的,窗口仅仅是处理它所在的线程队列中的消息。
      

  3.   

    消息队列是属于线程的,不是属于某个类的。窗口也是属于某个线程的,Post给窗口的消息都是放到窗口所属线程的消息队列里,再由线程中执行的消息循环来分发给目的窗口。CWinThread类中有消息循环的代码。
      

  4.   

    消息队列则是与线程 ( Thread ) 相关的,换句话说,一个线程只能有一个消息队列 ( queue ) 与之相对应。一个进程里面可以有多个线程;但是一线程里面就不能超出一个消息队列 ( Win98 里面甚至可以没有消息队列 )。
    http://blog.csdn.net/benny5609/archive/2008/03/10/2163625.aspx没有Wnd时可以处理WM_COMMAND,还可以自定义消息发送和接受PostThreadMessagewhile(GetMessage){
    TranslateMessage;
    DispatchMessage;
    }
      

  5.   

    应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情。在MFC的应用程序中(应用程序类基于CWinThread继承),必须要有一个消息循环,他的作用是从应用程序的消息队列中读取消息,并把它派送出去(::DispatchMessage)。而消息路由是指消息派送出去之后,系统(USER32.DLL)把消息投递到哪个窗口,以及以后消息在窗口之间的传递是怎样的。
    http://dev.rdxx.com/VC/MFC/2004-5/31/041446348.shtml
      

  6.   

    消息当然属于线程,每个线程当然只有一个消息队列
    不是“有谁在一个进程里面搞了多个消息队列的?”,这是自动做的,每当你在一个线程中调用诸如
    GetMessage之类的消息函数,如果该线程没有消息队列,就会自动创建一个
      

  7.   

    忽然有个疑问:如果我这个CWinTread被Post进来一个WM_CREATE,但是我这个线程里没有窗口(也就没有窗口函数),这个消息会怎样处理/路由呢?
      

  8.   

    WM_COMMAND消息一般是通过主窗口转到目标对象的