去耦顶级MFC对话框

时间:2012-11-14 20:17:42

标签: c++ mfc

我正在使用MFC和C ++,并且不确定如何正确地分离需要相互交互的两个顶级对话框。具体来说,其中一个对话框(比如对话框X)应该响应按钮点击另一个对话框(比如对话框Y)执行操作。在代码库中实现的当前方式是Y的构造函数将指向X的指针作为参数。然后,当单击其自己的按钮时,它使用此指针在X上执行操作。这似乎是对通用对话框的不合理限制。我希望能够做的是让X注册某些来自Y的按钮点击消息的监听器。不幸的是,我没有发现任何暗示这是可能的。

我考虑过两种选择:

  1. 注册自定义消息并将其从Y发送到X(高度耦合......)
  2. 广播消息并在X中监听(似乎过多)
  3. 我对MFC相对较新,并不熟悉MFC社区的习语或最佳实践。我非常感谢有关如何正确解耦对话框的任何想法或建议。

1 个答案:

答案 0 :(得分:2)

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