解耦*** MFC 对话框

Posted

技术标签:

【中文标题】解耦*** MFC 对话框【英文标题】:Decouple Top-Level MFC Dialogs 【发布时间】:2012-11-14 20:17:42 【问题描述】:

我正在使用 MFC 和 C++,但不确定如何正确解耦需要相互交互的两个***对话框。具体来说,其中一个对话框(比如对话框 X)应该执行一个动作来响应按钮点击另一个对话框(比如对话框 Y)。当前在代码库中实现这一点的方式是 Y 的构造函数将指向 X 的指针作为参数。然后当单击其自己的按钮时,它使用此指针对 X 执行操作。这似乎是对一般对话框的不合理限制。我希望能够做的是让 X 为来自 Y 的按钮单击消息注册某种监听器。不幸的是,我还没有找到任何表明这是可能的东西。

我考虑过的两种选择:

    注册自定义消息并将其从 Y 发送到 X(高度耦合...) 广播消息并在X中收听(似乎过度)

我对 MFC 比较陌生,对 MFC 社区的习语或最佳实践不是特别熟悉。对于如何正确解耦对话框的任何想法或建议,我将不胜感激。

【问题讨论】:

【参考方案1】:

最简单的方法是指定自定义WM_APP+x 消息并维护HWND 列表,以便在您的事件发生时得到通知。然而,更现代的方法是Observer pattern。这涉及创建一个IObserver 和一个ISubject 接口,它们的工作方式几乎相同。然后,您的对话框将实现这些接口。此解决方案的优点是您可以让基于非 HWND 的类监听您的事件。此外,发送消息的成本更高。

【讨论】:

以上是关于解耦*** MFC 对话框的主要内容,如果未能解决你的问题,请参考以下文章

MFC的基本对话框怎么画图?

MFC 如何将一个对话框嵌入到视图中

MFC 怎么使对话框充满窗口

mfc 对话框 改变大小

mfc中怎样在一个基于对话框程序中添加菜单栏 急。。。!

mfc 单文档 多文档 对话框 区别