c++ - 消息框发送 Windows 消息?

标签 c++ winapi windows-7

我有一个相对简单的 Window 类。我已经创建了一个窗口,关联了我的 this 等等。现在,我抛出了一个异常来指示问题。当我调用 MessageBox 弹出错误时,程序崩溃了,因为它试图调用我的 Window Proc。现在,我的意思是,诚然,我在这里没有通过 SRP,只需编写一个简短的自有 HWND 类就可以解决这个问题,因为窗口没有正确清理。但是,我真的很困惑为什么它试图在我的 MessageBox 调用中处理 Window 消息 - owner 参数是 nullptr。有什么建议吗?

编辑:如果我适本地调用 DestroyWindow,那么现在消息框不会显示,尽管应用程序不会崩溃。仅当我从窗口中手动删除 this 时它才有效,因此如果调用 proc,它将转发到 DefWindowProc,然后是 DestroyWindow。我的意思是,我认为如果您在没有所有者的情况下调用 MessageBox,那么它就可以正常工作,无论您对系统中的其他窗口做了什么。

最佳答案

这里发生的事情是,当您显示消息框时,队列中仍然有无用窗口的消息。消息框运行模态窗口消息泵并发送有问题的消息。请记住,从同一线程创建的所有窗口共享一个消息队列。

我不知道如何解决您的问题,但事情就是这样。

顺便说一句,传递一个 null 所有者不是一个好主意,因为它会导致您的消息框在您的主应用程序最小化时不会最小化,例如。

关于c++ - 消息框发送 Windows 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6192418/

相关文章:

c++ - 如何为 Windows 和 Android 创建 SDL2 Visual Studio 2015 或 2017 解决方案?

C++ 自定义比较器不工作 MWE

c - 同步ReadFile读取的字节数

php - cakePHP 内存缓存逻辑不工作

windows-7 - Win7 WOW64中应用程序中的奇怪线程

c++ - 错误 C2027 : use of undefined type GUITHREADINFO

c++ - 为什么模板特化需要内联定义?

c++ - Win32 菜单项对齐

c# - 在 C#/.NET 中访问超出 MAX_PATH 的文件

dll - InnoScriptStudio2 加载 ISCmplr.dll 时出错