0

我想在将消息发送到窗口过程之前读出消息循环中的消息。我尝试像这样阅读的大多数消息都被正确读取,但是当我关闭窗口时,无法读取WM_CLOSEWM_DESTROY消息,好像它们从未收到过一样。这就是我所做的:

void Framework::Run(){
while(running){

    MSG msg;
    while(PeakMessage(&msg, NULL, 0, 0)){
        TranslateMessage(&msg);
        switch(msg.message){
            case WM_DESTROY:
                PostQuitMessage(0);
                break;
            case WM_QUIT:
                running = false;
                break;
        //...other cases...
        }
        DispatchMessage(&msg);
    }
//...
}
}

我在第一种情况下设置了一个断点,但即使我关闭窗口(通过单击“X”),断点也不会被命中。但是,当我WM_DESTROY在窗口过程中检查时,它会被读取并且一切正常。为什么不在外面呢?

此类消息是否直接发送到窗口 proc?如何?

4

1 回答 1

3

消息循环只看到发布到消息队列的消息。并非所有消息都通过消息队列。 WM_DESTROY就是这样一个消息。相反,您应该做的是处理窗口过程中的消息,以便您看到窗口接收到的每条消息,无论消息是否通过消息队列。

如果您需要查看不是您自己创建的窗口的消息,或者对于具有系统提供的窗口过程的标准窗口,您可以使用SetWindowSubclass().

于 2014-09-28T15:02:13.837 回答