msdn上说PM_NOREMOVE是不删除队列的消息,PM_REMOVE是删除队列的消息。
我在自己创建的线程里循环接收按键消息。用的PM_NOREMOVE。
while(wait)
{
BOOL result = PeekMessage(&pMsg, 0, 0, 0, PM_NOREMOVE);
if(result)
{
if(pMsg.message == WM_LBUTTONDOWN)
MessageBox(NULL, "button", "ok", MB_OK);
}
}
界面上按下按钮后就发送消息到线程。
按照理论只要按下一次按钮,线程的消息队列里就该有了按键消息。之后我不再按按钮,那线程里也该一直报接收到消息阿。
可是实际情况,线程不报任何消息。只有我按下按钮,他才报消息。和PM_REMOVE的效果是一样的。
为什么?

解决方案 »

  1.   

    PM_NOREMOVE:PeekMessage处理后,消息不从队列里除掉。
        PM_REMOVE:PeekMessage处理后,消息从队列里除掉。
      

  2.   

    我知道啊,请看我的问题。
    如果消息不除掉的话,再次peekmessage不是应该还能读到吗,但是线程里却读不到阿
      

  3.   

    好像是MessageBox把消息去掉了。
    可是不知道为什么。
      

  4.   

    我觉得是这样的,  Peekmessage 后如果不将消息删除应该是为了让消息能被子窗口(或其他下级过程)捕获,由子窗口处理后将消息删除;  如果按照楼主所说,谁都不删除消息,那么程序就进入一模一样的循环无法再正常处理其他的消息了,这样肯定不是程序执行所期望的;  那么messagebox弹出后将此消息删除了的问题就通了,messagebox最后接收到了此消息,其默认过程就是将消息删除或者再分发,这里表现的是删除~~以上是个人分析,是否完全正确待考证~