MFC对话框中的父通知
我有一个第一个对话框,上面有一个简单的按钮,当点击按钮时,第二个对话框使用CDialog :: Create(IDD,this)创建。 我希望父对象在第二个对话框被销毁时得到通知,但不向第二个对话框添加任何代码,即不在OnDestroy方法中添加m_pParent-> Notify()行。 我在父对话框中尝试过OnParentNotify,PreTranslateMessage,SubclassWindow,但没有成功。 我没有使用第二个对话框的WS_CHILD样式。 任何想法?
要完成:实际上,我有一个ComboBox派生类(但问题与按钮相同),我正在显示一个非模式对话框而不是显示列表框。 但我希望控件尽可能通用,以便可以使用任何无模式对话框。 这就是为什么我不想在第二个对话框中添加特定通知的原因。 如果我有责任,我会使用这个技巧,但我要求一个更通用的解决方案。 PreTranslateMessage只捕获WM_PAINT,WM_NCMOUSELEAVE和WM_NCMOUSEMOVE。
使用一个基类,并让父母仅通过基类引用无模式孩子。 在PostNcDestroy的基础中,将其发布到父级。
父母对所有消息进行一系列过滤/窥探是没有意义的。 在一个基类中实现行为是有意义的,你希望这个行为对于你可能拥有的无模式孩子的所有不同的未来风格都有共同之处。
OnParentNotify()不会被调用,因为dialog2不是dialog1的子对象。
PreTranslateMessage()应该在这里帮助(虽然我不喜欢这个项目符号)。 诀窍是无模式对话框在关闭时不会自行销毁。 如果你想让对话框死掉,它必须在关闭时调用DestroyWindow(),比如OnCancel()覆盖。
当然,首先想到的是不知道为什么你不想在无模式对话框代码中添加自定义通知。
编辑:另一种方法将包括安装消息钩子(对于当前线程,而不是整个系统!)。 这将帮助您捕获与dialog1相同的线程的所有窗口的所有消息。 请参阅SetWindowsHookEx()
如何将主父窗体事件发布到消息队列?
链接地址: http://www.djcxy.com/p/39247.html