a程序广播了一跳自定义消息。b程序在重载PreTranslateMessage(MSG* pMsg)函数进行处理,收到该消息就return true,但是发现每广播一条消息,b程序就收到了3条。而spy++工具里查看,程序b的确只收到了一条。大家帮忙看看是什么问题呢

解决方案 »

  1.   

    return true
    交给下一个消息处理函数处理有几个函数处理这个消息?
      

  2.   

    只有在PreTranslateMessage(MSG* pMsg)里处理,收到该消息后就return true的
      

  3.   

    消息被上层的窗口处理了。
    windows的消息处理流程就是这样的,如果消息没被当前窗口处理,则向上提交,直到默认的消息处理函数,还不能处理的话,抛弃此消息
      

  4.   

    ouyh12345(五岭散人),不是消息丢了。是多了
      

  5.   

    没理解我的意思。
    比如,对话框程序,在dialog的PreTranslateMessage函数里截获并return true了。
    首先,对话框接受了此消息,但没处理,交app处理。
    app也没处理,交默认的windows消息函数处理。
    默认的windows消息函数也没处理,最后抛弃掉。
    这样,在此程序里,就收到了3次。
      

  6.   

    那我收到这条消息之后,就return true了啊。处理是以返回值为真或者假来判定是否处理的啊。还是有点不理解呢。
      

  7.   

    return true就是交给上层处理。
    return false就表示已经处理好了。
      

  8.   

    奇怪的是,我收到消息之后无论返回true还是false,消息都会重新处理3次。是不是消息id和系统的有冲突呢?我试着改了其他的值,还是有这个问题。消息ID是WM_USER + 1032,我查了下并没有冲突哦,郁闷,想不通