【发布时间】:2011-08-04 01:58:49
【问题描述】:
我有一个 c++ windows 应用程序调用一个 c++/cli 库,该库正在调用一个托管库。托管库正在调用 OpenFileDialog.Show 与 Win32 窗口拥有的 WPF 窗口父级。我还没有找到更好的方法来做到这一点,我在这里阅读并搜索 google 和 social.msdn 的所有资源都建议做我正在做的事情。
对话框打开得很好,但是当我点击取消按钮时,例如,应用程序完全失去焦点。我不确定它为什么会发生,但我似乎无法让它停止。我尝试了很多不同的方法都无济于事。
如果我只是启动 OpenFileDialog 而不创建 WPF 窗口,我看不到问题。 如果我不设置 WPF 窗口的所有者,我看不到问题。如果我调用 OpenFileDialog.Show 并且不传递父级,但仍然创建 WPF 窗口并设置其所有者,我仍然会看到问题。
我可以破解它以在它失去焦点后将父应用程序窗口设置为前台,但我不想这样做。
我已经为我的场景上传了一个小示例解决方案来说明问题:
http://dl.dropbox.com/u/26054523/MixedExample.zip
任何帮助将不胜感激。
【问题讨论】:
-
你试过在同一个线程上运行对话框吗? WinForms 和 Win32 都是单线程的。它可能不喜欢你从另一个线程打开对话框。
-
是的,我有,它不允许。在另一个线程中打开的原因是因为WPF似乎想在STA线程中运行。
-
我对 C# 也有类似的问题。出于某种原因,一旦 OpenFileDialog 被解除(通过 OK 或取消),程序就会失去焦点。
标签: c# wpf winapi c++-cli openfiledialog