gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:41 26 4
gpt4 key购买 nike

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

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

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

我已经为这个问题苦苦挣扎了两天,我需要一些新的线索来继续挖掘。

最佳答案

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

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

关于c++ - 什么可能导致 DefWindowProc 停止处理消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1212876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com