2

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

我考虑过的两种选择:

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

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

4

1 回答 1

2

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

于 2012-11-15T08:32:29.210 回答