【问题标题】:Message Box sending Windows messages?消息框发送 Windows 消息?
【发布时间】:2011-05-31 19:16:16
【问题描述】:

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

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

【问题讨论】:

    标签: c++ winapi windows-7


    【解决方案1】:

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

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

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

    【讨论】:

    • 它只是用于终止或printf 调试,所以不良行为不是问题。
    猜你喜欢
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2011-07-21
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多