什么可能导致DefWindowProc停止处理消息?

时间:2009-07-31 14:32:27

标签: c++ windows winapi com mfc

我遇到了应用程序的奇怪行为。我想在MDI应用程序中关闭框架窗口,所以我将WM_SYSCOMMAND(SC_CLOSE)发送到该窗口。之后,我收到了OnSysCommand。然后我调用CMDIChildWnd :: OnSysCommand继续处理。

问题是,有时OnSysCommand的基本实现会调用OnClose,我的框架会被销毁,有时则不会。我做了一个调查,似乎差异出现在_NtUserMessageCall中(实际上这个方法调用了一些失败的内核模式函数)。 当WS_SYSCOMMAND成功时,_NtUserMessageCall调用DispatchHook和一大堆user32.dll方法,我的消息到达目标窗口。如果失败,则不关闭框架窗口,也不调用OnClose。

我用尽了可能导致这种奇怪行为的想法。我用Application Verifier检查了应用程序,一切似乎都没问题。还有一件事,只有当我的应用程序通过COM启动时才会出现问题。

我正在与这个问题斗争两天,我需要一些新的线索继续挖掘。

1 个答案:

答案 0 :(得分:1)

我建议您在 OnSysCommand 处理程序中,只需向主框架窗口发送 WM_CLOSE 消息,然后再调用默认处理。

但是,甚至不打扰调用 CMDIChildWnd :: OnSysCommand 方法。