我有一个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不会关注它。只有在整个应用程序关闭/最小化时才会关闭/最小化。
如果需要,我可以附上一个显示问题的示例应用程序。
请告知。
非常感谢你。
答案 0 :(得分:0)
另一种解决方案是让您的WPF窗口成为用户控件。创建一个MFC无模式对话框,并将WPF用户控件放在MFC无模式对话框中。