无模式子WPF窗口到本机MFC MDI应用程序

时间:2011-08-31 06:26:46

标签: wpf mfc window mdi modeless

我有一个MFC MDI应用程序,我正在尝试添加一个新的对话框。我希望这个对话框在WPF中(基本上是一个Window而不是一个对话框)。此窗口应该是无模式的,并且是当前MDI视图的子项。

假设我在MFC应用程序中有CMyView,在其OnCreate中,我尝试创建WPF窗口。为此,我创建了一个名为CMyWindowWrapper的包装类(用/ CLR编译)

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
  if (CView::OnCreate(lpCreateStruct) == -1)
    return -1;

  m_wrapper.Create(this);

  return 0;
}

窗口包装器类有一个Create函数,它实际上创建了WPF窗口:

void CMyWindowWrapper::Create(CWnd* pParent)
{ 
   MyWindow^ window = gcnew MyWindow();

   window->ShowModeless((IntPtr)pParent->GetSafeHwnd());

   m_myWindow = window;
}

MyWindow是WPF窗口,我在其中添加了一个名为ShowModeless的函数,如下所示:

public void ShowModeless(IntPtr parent)
 {
        WindowInteropHelper helper = new WindowInteropHelper(this);
        helper.Owner = parent;

        Show();
        ShowInTaskbar = false;
 }

现在应用程序的行为如下:无论何时创建CMyView,都会成功创建无模式MyWindow,即使焦点位于CMyView上,它也始终显示在CMyView之上。但是,当CMyView关闭或最小化时,MyWindow不会关注它。只有在整个应用程序关闭/最小化时才会关闭/最小化。

如果需要,我可以附上一个显示问题的示例应用程序。

请告知。

非常感谢你。

1 个答案:

答案 0 :(得分:0)

另一种解决方案是让您的WPF窗口成为用户控件。创建一个MFC无模式对话框,并将WPF用户控件放在MFC无模式对话框中。