我正在使用MFC和C ++,并且不确定如何正确地分离需要相互交互的两个顶级对话框。具体来说,其中一个对话框(比如对话框X)应该响应按钮点击另一个对话框(比如对话框Y)执行操作。在代码库中实现的当前方式是Y的构造函数将指向X的指针作为参数。然后,当单击其自己的按钮时,它使用此指针在X上执行操作。这似乎是对通用对话框的不合理限制。我希望能够做的是让X注册某些来自Y的按钮点击消息的监听器。不幸的是,我没有发现任何暗示这是可能的。
我考虑过两种选择:
我对MFC相对较新,并不熟悉MFC社区的习语或最佳实践。我非常感谢有关如何正确解耦对话框的任何想法或建议。
答案 0 :(得分:2)
最简单的方法是指定自定义WM_APP + x条消息,并维护一个HWND
列表,以便在您的活动发生时收到通知。然而,更现代的方法是Observer pattern。这涉及创建IObserver
和ISubject
接口,它几乎以相同的方式工作。然后,您的对话框将实现这些接口。此解决方案的优点是您可以让基于非HWND的类监听您的事件。此外,发送消息的成本更高。