【发布时间】:2013-11-11 05:59:45
【问题描述】:
在我的 winforms 应用程序中,我试图获取一个主窗口句柄,因此我可以将其设置为我的 wpf 模态窗口的父级。我对winforms不太熟悉,所以经过一番谷歌搜索后,我找到了两种方法来获得它。
System.Windows.Forms.Application.OpenForms[0].HandleSystem.Diagnostics.Process.GetCurrentProcess().MainWindowHandle
(1) 似乎总是返回看起来正确的相同值(至少我的模态窗口的行为符合预期),而 (2) 有时返回与 (1) 相同的值,但有时 - 一个完全不同的指针,这似乎不起作用(我的模式窗口出现在所有其他窗口的顶部,而不仅仅是父窗口)。
谁能解释这两种方法的区别?有时它们返回不同的结果是否正常?
编辑:
如果其他人想知道:一旦你得到了句柄,你可以通过创建WindowInteropHelper 类来使用它:
public static void SetInteropParent(this Window wpfDialogWindow, IntPtr winformsParentHandle)
{
new WindowInteropHelper(wpdDialogWindow) { Owner = winformsParentHandle };
}
【问题讨论】:
-
@JMK,我必须在我的主窗体上按下一个按钮才能显示一个模式窗口,所以我认为可以安全地假设活动窗口总是相同的。
-
不能用Form.Handle吗?
-
@MPatel,我手头没有参考资料。而且我不想注入它。
标签: c# winforms window-handles