繁体   English   中英

解耦顶级 MFC 对话框

[英]Decouple Top-Level MFC Dialogs

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

我考虑过的两种选择:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM