3

我有一个 MFC MDI 应用程序,我正在尝试向它添加一个新对话框。我希望这个对话框在 WPF 中(基本上是一个窗口而不是一个对话框)。这个窗口应该是无模式的并且是当前 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 不会跟随它。只有当整个应用程序关闭/最小化时,它才会关闭/最小化。

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

请指教。

太感谢了。

4

1 回答 1

0

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

于 2012-01-31T21:13:16.923 回答