Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MFC对话框中的父通知_Mfc - Fatal编程技术网

MFC对话框中的父通知

MFC对话框中的父通知,mfc,Mfc,我有一个第一个对话框,上面有一个简单的按钮,单击该按钮时,会使用CDialog::Create(IDD,this)创建第二个对话框。我希望在第二个对话框被销毁时通知父级,但不向第二个对话框添加任何代码,即不在OnDestroy方法中添加m_pParent->Notify()行。 我在父对话框中尝试了OnParentNotify、PreTranslateMessage和Subclass窗口,但没有成功。我没有在第二个对话框中使用WS_子样式。有什么想法吗 要完成:事实上,我有一个ComboBox派

我有一个第一个对话框,上面有一个简单的按钮,单击该按钮时,会使用CDialog::Create(IDD,this)创建第二个对话框。我希望在第二个对话框被销毁时通知父级,但不向第二个对话框添加任何代码,即不在OnDestroy方法中添加m_pParent->Notify()行。 我在父对话框中尝试了OnParentNotify、PreTranslateMessage和Subclass窗口,但没有成功。我没有在第二个对话框中使用WS_子样式。有什么想法吗


要完成:事实上,我有一个ComboBox派生类(但按钮的问题是相同的),我显示的是一个无模式对话框,而不是列表框。但我希望控件尽可能通用,以便可以使用任何无模式对话框。这就是我不想在第二个对话框中添加特定通知的原因。如果有必要,我会使用这个技巧,但我要求一个更通用的解决方案。PreTranslateMessage仅捕获WM_PAINT、WM_NCMOUSELEAVE和WM_NCMOUSEMOVE。

将主父窗体事件发布到消息队列如何?

由于dialog2不是dialog1的子级,因此不会调用OnParentNotify()

PreTranslateMessage()应该在这里有所帮助(尽管我不喜欢这个项目符号)。诀窍在于,无模式对话框在关闭时不会自我破坏。如果希望对话框停止运行,它必须在关闭时调用DestroyWindow(),例如OnCancel()重写

当然,首先想到的是为什么不想在非模态对话框代码中添加自定义通知


编辑:另一种方法是安装消息挂钩(针对当前线程,而不是整个系统!)。这将帮助您捕获与dialog1相同线程关联的所有窗口的所有消息。请参见

使用基类并让您的父级仅按基类引用无模式子级。在基本postnc中,将其发布到父级


让家长对所有消息进行大量过滤/监视是没有意义的。在一个基类中实现行为是有意义的,您希望基类与将来可能具有的无模式子类的所有不同风格相同。

事实上,我有一个ComboBox派生类,我正在显示一个无模式对话框,而不是显示列表框。但我希望控件尽可能通用,以便可以使用任何无模式对话框。预翻译消息只捕获WM_PAINT、WM_NCMOUSELEAVE和WM_NCMOUSEMOVE。我建议您编辑您的问题以解释您的场景。如何关闭和销毁无模式对话框?失去焦点应该足够了。但是,根据您的场景,您也不希望将该代码放在modelss对话框中。请参阅我的关于钩子的编辑谢谢你的帮助Serge,它最终使用了OnActivate/PreTranslateMessage(WM_NCMOUSEMOVE)的组合。但是按照ajryan的建议,我将为我的无模式对话框使用一个基类,因为我最初的想法不太实用:有许多这种类型的组合框,父级管理将过于复杂。好的,但是你仍然没有告诉我们非模态对话框应该如何被破坏。如果你找到了答案,那么请标记是这样的。作为询问者,这是你的责任。谢谢ajryan,它最终使用了OnActivate/PreTranslateMessage(WM_NCMOUSEMOVE)的组合。我将按照你的建议创建一个基类,因为没有它在父级上可能会非常复杂。非常感谢。