2011-05-31 176 views
3

我有一个相对简单的Window类。我创建了一个窗口,关联了我的this等等。现在,后来我抛出了一个异常来指出问题。当我呼叫MessageBox弹出错误时,程序崩溃,因为它试图调用我的Window Proc。现在,我的意思是,无可否认,我在这里失败了SRP,只是写了一个简短的拥有自己的HWND类将解决这个问题,因为窗口没有正确清理。然而,我真的很困惑,为什么它试图在我的MessageBox调用中处理窗口消息 - 所有者参数是nullptr。有什么建议么?消息框发送Windows消息?

编辑:如果我恰当地调用DestroyWindow,那么现在消息框不显示,尽管应用程序不会崩溃。它只适用于我从窗口手动删除this,所以如果proc被调用,它将转发到DefWindowProc,然后DestroyWindow。我的意思是,我认为如果你没有一个所有者就叫MessageBox,那么无论你对系统中的其他窗口做了什么,它都可以工作。

回答

4

这里发生的情况是,当您显示消息框时,队列中的潜伏窗口仍有消息。消息框运行模式窗口消息泵并发送麻烦的消息。请记住,从同一个线程创建的所有窗口共享一个消息队列。

我不知道如何解决您的问题,但这是怎么回事。

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

+0

它只是用于终止或'printf'调试,所以不好的行为不是问题。 – Puppy 2011-05-31 19:51:15

+0

@deadmg好的,我明白了 – 2011-05-31 19:54:21