【问题标题】:What may cause DefWindowProc to stop processing messages?什么可能导致 DefWindowProc 停止处理消息?
【发布时间】:2010-11-15 19:41:15
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ windows winapi com mfc


    【解决方案1】:

    我建议在您的 OnSysCommand 处理程序中,在继续调用默认处理之前向主框架窗口发送 WM_CLOSE 消息。

    但甚至不必费心调用 CMDIChildWnd::OnSysCommand 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 2021-12-07
      • 2017-07-31
      • 2021-12-05
      • 1970-01-01
      相关资源
      最近更新 更多