混合MFC和WPF:模态对话框
-
07-07-2019 - |
题
我正在使用C ++ / CLI接口层将C#WPF对话框添加到现有的C ++ MFC应用程序中。我有工作,除了我有模态问题。例如:
- MFC应用程序使用ShowDialog显示WPF对话框。按预期工作。
- 该WPF对话框显示使用DoModal的MFC对话框。 WPF对话框隐藏在基本C ++应用程序后面,除非我手动更改IsEnabled,否则不会禁用。不理想,但它确实有效。
- 现在,关闭了MFC对话框。现在出于某种原因启用了基本MFC应用程序,因为WPF对话框尚未关闭,因此仍应禁用它。这很糟糕,因为它现在允许用户在WPF对话框仍处于打开状态时做疯狂的事情。 醇>
我觉得如果能正确设置父对话框会更好。但到目前为止,我还没有能够将MFC对话框的父级设置为WPF对话框,反之亦然。而且,我甚至都不知道是否能解决这个问题。
有什么想法吗?
解决方案
打开CDialog时,诀窍是使用WindowsInteropHelper获取父WPF对话框的HWND。然后,您可以使用CWnd :: Attach将CWND包装在CWnd类中以传递给CDialog的构造函数。
我遇到的问题是我已经构建了CDialog,但尚未显示。只有当目标子窗口具有有效句柄时,才能使用各种版本的SetParent。我必须在我的CDialog类中编写一个新函数来设置m_wndParent,这是它在最终创建对话框时用作父元素的函数。一切都很好!
以某种方式从MFC对话框创建WPF对话框“只是工作”。这很神奇。
其他提示
显示WPF对话框时,您使用的是 HwndSource类包装WPF窗口?如果是这样,您可以 :: SetParent WPF窗口以及使用HwndSource.Handle属性设置子子的父级。
不隶属于 StackOverflow