解耦*** 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 对话框的主要内容,如果未能解决你的问题,请参考以下文章