首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关闭WPF模式窗口后,如何将MFC对话框带到前台?

关闭WPF模式窗口后,如何将MFC对话框带到前台?
EN

Stack Overflow用户
提问于 2014-08-15 14:44:13
回答 1查看 447关注 0票数 0

我有一个MFC应用程序,它通过COM接口发布消息,在C++中的另一个进程上打开表单。然后,该进程使用ActiveX控件传递消息,以打开WinForm或WPF窗口(.NET)。我正在通过我原来MFC对话框的HWND,以便让新的对话框变成一个子对话框。

到目前为止,一切都在工作,尽管WPF表单除了通过WindowInteropHelper设置所有者之外,还要求我禁用父程序,当然,在关闭时重新启用父程序。

当我关闭表单时,就会出现问题。当我关闭WinForm时,原始对话框变为活动对话框,但当我关闭WPF表单时,任何在任何时间点具有焦点的窗口都会成为活动窗口。唯一可以重新激活MFC对话框的方法是单击标题栏。

我已经尝试了十几种方法尝试调用SetForegroundWindow,并检查以确保我的进程是当前的活动进程。如果我在其中放置一个断点并继续,那么我的主对话框就会正常活动。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-28 17:03:07

因此,我现在已经通过将WPF窗口转换为UserControl并以(Win)形式承载控件来解决这个问题。

唯一的缺点是这个UserControl也是从我的WPF应用程序中使用的,所以我也有一个包含UserControl的WPF窗口。我只是创建了一个简单的表单,它接受构造函数中的控件,然后设置外观。这也意味着我能够摆脱设置所有者和处理WPF窗口所有者的启用状态的代码。

所以我打开窗口的代码是:

代码语言:javascript
运行
复制
MyWindow window = new MyWindow();
WindowInteropHelper helper = new WindowInteropHelper(window);
helper.Owner = owner;
EnableWindow(owner, false); // Platform Invoke
window.Closed += (s, e) => { EnableWindow(owner, true); };
window.ShowDialog();

并成为:

代码语言:javascript
运行
复制
HostWinForm WinForm = new HostWinForm(new MyControl());
winForm.ShowDialog();

我不知道是否有一个解决方案,可以让我保持一个WPF窗口,也有我的模态行为,但这个解决方案对我有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25328548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档