将消息发布到模型对话框

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于将消息发布到模型对话框的主要内容,如果未能解决你的问题,请参考以下文章

检索未读消息作为模型方法雄辩

Laravel 按最后一条消息对对话进行排序

如何在不打开任何对话框的情况下在 Facebook 上发布消息?

模型对话框移动到主窗口后面的 Qt 错误

MFC 模态对话框的奇怪行为

将静态控件子类化到对话框窗口