我练习的一个程序在响应一个右键菜单项时调用SendMessage(WM_QUIT)程序无法退出;
换成PostMessage(WM_QUIT)成功,不知为何请高手指教

解决方案 »

  1.   

    因为SendMessage把消息发送给当前窗口,而这个消息实际应该发送给的是当前线程(或者主线程?)
      

  2.   

    WM_QUIT消息比较的特别,他是不放进消息队列的!!
    SendMessage是把消息传送到队列,然后等待消息处理完成,
    WM_QUIT消息出来后,程序已经退出,就不会返回消息给等待线程,
    从而造成等待线程一直等待,而不会退出!!!
      

  3.   

    要分清哪些消息用Send哪些消息用Post来发。如果不清楚,可以查MSDN中各个消息的说明,里面都有提到。
      

  4.   

    个人认为只是发送的目的地错了,遇到WM——QUIT这样没有处理过程的消息,系统应该带一个错误码返回
    不过没有试过,楼主要感兴趣可以试试
      

  5.   

    注意:SendMessage从来不进队列,只有PostMessage才会进队列
      

  6.   

    我认为SendMessage只是调用处理函数并返回,PostMessage则是将消息放在消息队列中。
    当GetMessage在消息队列中取到WM_QUIT时,GetMessage返回值为0,然后循环退出,主线程退出。另外建议使用PostQuitMessage()函数,而不是PostMessage(WM_QUIT);
      

  7.   

    WM_QUIT 是比较特殊的消息,对于这个消息有一个专门的API:PostQuitMessage  ,所以最好不要用SendMessage或是PostMessage,这一点MSDN上有,下面是MSDN原文:
    ResThe WM_QUIT message is not associated with a window and therefore will never be received through a window's window procedure. It is retrieved only by the GetMessage or PeekMessage functions. Do not post the WM_QUIT message using the PostMessage function; use PostQuitMessage.