wpf - 无模式子 WPF 窗口到 native MFC MDI 应用程序

标签 wpf mfc window mdi modeless

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

假设我在 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 不会跟随它。仅当整个应用程序关闭/最小化时,它才会关闭/最小化。

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

请指教。

非常感谢。

最佳答案

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

关于wpf - 无模式子 WPF 窗口到 native MFC MDI 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7253334/

相关文章:

c# - 事件处理程序中抛出的 WPF 异常被吞噬了吗?

WPF - 不要拉伸(stretch)图像,而是将其放入容器(或 MaxHeight)中

c++ - 接下来的两个片段有什么区别?

c++ - fatal error C1189 : #error : WINDOWS. H 已包括在内。 MFC 应用程序不得 #include <windows.h>

c# - 强制使用 ADO.NET Entity Framework 的存储过程

wpf - 使用 PRISM 切换主视图

c++ - 无法让文件删除在 mfc 对话框中工作

swift - NSVisualEffectBlendingMode OS X Swift

javascript - 是否需要在 setTimeout 和 setInterval 前面加上 window 对象?

animation - 当我运行此示例 pygame 代码时,DOS 窗口出现并突然消失,无需等待任何用户输入