【问题标题】:Post messages to model dialog将消息发布到模型对话框
【发布时间】:2014-04-10 12:24:22
【问题描述】:

我打算创建无模式对话框并接收来自另一个线程的消息。根据我对创建无模式对话框的理解,我需要在 CWinThread 派生类对象中创建 CWinThread 和一些框架或对话框。但是我真的需要创建框架/对话框吗?为什么我不能将消息直接发布到 CWinThread 派生类对象?

【问题讨论】:

    标签: c++ visual-c++ mfc


    【解决方案1】:

    您不需要对话框来接收消息,但您确实需要一个窗口句柄。该窗口句柄不需要与视觉对象相关联。我认为您需要的是一个仅消息窗口。

    在 MFC 中,您可以通过 CWnd 使用 CreateEx 方法来创建仅消息窗口。将HWND_MESSAGE 传递给CreateExhWndParent 参数。

    确实可以创建一个隐藏的无模式对话框来接收消息。然而,这是非常浪费的。更重要的是,MFC 是围绕在主 UI 线程中创建对话框的概念设计的。因此,出于许多不同的原因,您确实希望避免创建一个对话框,只是为了在线程中接收消息。使用仅消息窗口。

    【讨论】:

    • 如果我错了,请纠正我。首先,我需要在 main 中或使用 CWinThread 线程创建从 CWnd 对象派生的类。然后我可以从我的辅助线程发送消息。
    • 是的,我会从CWnd 派生一个类。并在其构造函数中调用CreateEx
    【解决方案2】:

    消息处理程序将消息发布/发送到窗口处理程序,因此您需要一个占位符窗口来接收该消息并根据需要进行处理。

    【讨论】:

      【解决方案3】:

      可以使用 PostThreadMessage 将消息发布到 CWinThread 派生对象。但是在某些情况下这是危险的,在这里讨论:

      http://www.codeproject.com/Articles/225755/PostThreadMessage-Demystified

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多