混合MFC和WPF:模态对话框

时间:2008-11-07 19:16:53

标签: wpf mfc c++-cli modal-dialog

我正在使用C ++ / CLI接口层将C#WPF对话框添加到现有的C ++ MFC应用程序中。我有工作,除了我有模态问题。例如:

  1. MFC应用程序使用ShowDialog显示WPF对话框。按预期工作。
  2. 该WPF对话框显示使用DoModal的MFC对话框。 WPF对话框隐藏在基本C ++应用程序后面,除非我手动更改IsEnabled,否则不会禁用。不理想,但它确实有效。
  3. 现在,关闭了MFC对话框。现在出于某种原因启用了基本MFC应用程序,因为WPF对话框尚未关闭,因此仍应禁用它。这很糟糕,因为它现在允许用户在WPF对话框仍处于打开状态时做疯狂的事情。
  4. 我觉得如果能正确设置父对话框会更好。但到目前为止,我还没有能够将MFC对话框的父级设置为WPF对话框,反之亦然。而且,我甚至都不知道是否能解决这个问题。

    有什么想法吗?

2 个答案:

答案 0 :(得分:4)

打开CDialog时,诀窍是使用WindowsInteropHelper获取父WPF对话框的HWND。然后,您可以使用CWnd :: Attach将CWND包装在CWnd类中以传递给CDialog的构造函数。

我遇到的问题是我已经构建了CDialog,但尚未显示。只有当目标子窗口具有有效句柄时,才能使用各种版本的SetParent。我必须在我的CDialog类中编写一个新函数来设置m_wndParent,这是它在最终创建对话框时用作父元素的函数。一切都很好!

以某种方式从MFC对话框创建WPF对话框“只是工作”。这很神奇。

答案 1 :(得分:2)

显示WPF对话框时,您是否使用HwndSource class来包装WPF窗口?如果是这样,您可以::SetParent WPF窗口以及使用HwndSource.Handle属性来设置子子的父级。