将消息发布到模型对话框
Posted
技术标签:
【中文标题】将消息发布到模型对话框【英文标题】:Post messages to model dialog 【发布时间】:2014-04-10 12:24:22 【问题描述】:我打算创建无模式对话框并接收来自另一个线程的消息。根据我对创建无模式对话框的理解,我需要在 CWinThread 派生类对象中创建 CWinThread 和一些框架或对话框。但是我真的需要创建框架/对话框吗?为什么我不能将消息直接发布到 CWinThread 派生类对象?
【问题讨论】:
【参考方案1】:您不需要对话框来接收消息,但您确实需要一个窗口句柄。该窗口句柄不需要与视觉对象相关联。我认为您需要的是一个仅消息窗口。
在 MFC 中,您可以通过 CWnd
使用 CreateEx
方法来创建仅消息窗口。将HWND_MESSAGE
传递给CreateEx
的hWndParent
参数。
确实可以创建一个隐藏的无模式对话框来接收消息。然而,这是非常浪费的。更重要的是,MFC 是围绕在主 UI 线程中创建对话框的概念设计的。因此,出于许多不同的原因,您确实希望避免创建一个对话框,只是为了在线程中接收消息。使用仅消息窗口。
【讨论】:
如果我错了,请纠正我。首先,我需要在 main 中或使用 CWinThread 线程创建从 CWnd 对象派生的类。然后我可以从我的辅助线程发送消息。 是的,我会从CWnd
派生一个类。并在其构造函数中调用CreateEx
。【参考方案2】:
消息处理程序将消息发布/发送到窗口处理程序,因此您需要一个占位符窗口来接收该消息并根据需要进行处理。
【讨论】:
【参考方案3】:您可以使用 PostThreadMessage 将消息发布到 CWinThread 派生对象。但是在某些情况下这是危险的,在这里讨论:
http://www.codeproject.com/Articles/225755/PostThreadMessage-Demystified
【讨论】:
以上是关于将消息发布到模型对话框的主要内容,如果未能解决你的问题,请参考以下文章