发送Windows消息的消息框

Message Box sending Windows messages?

本文关键字:消息 发送 Windows      更新时间:2023-10-16

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

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

这里发生的情况是,当您显示消息框时,队列中仍有针对dud窗口的消息。消息框运行一个模式窗口消息泵,并分派有问题的消息。请记住,从同一线程创建的所有窗口都共享一个消息队列。

我不知道如何解决你的问题,但这就是发生的事情。

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