2012-10-25 53 views
2

我有父窗口与其所有者通过WindowInteropHelper设置。 在这种情况下,Parent.Owner等于null。 有什么办法来获得拥有窗口的窗体的句柄?如何通过WindowInteropHelper设置窗口的拥有者来获取窗口的所有者?

我需要这个对话窗口。当我尝试设置关闭的对话窗口作为所有者时,我得到异常。 因此,我想将对话框的所有者设置为另一个对话框的所有者。但它是WinForm和DialogWindow.Owner等于null。

的WinForm(通过WindowInteropHelper-> WPF父对话框(关闭) - > WPF子对话框

+0

请加上这表明窗户关系代码臀部。从描述中不清楚... – DmitryG

回答

4

为了获得该公司拥有的特定WPF窗口中,您可以使用下面的代码的WinForms形式的手柄:

IntPtr ownerFormHandle = new WindowInteropHelper(wpfWindow).Owner 

要在任何窗口的句柄(WinFroms或WPF)拥有的特定窗口(WinFroms或WPF),您可以使用下面的代码:

IntPtr ownerHandle = WinAPI.GetWindow(handle, WinAPI.GW_OWNER); 
//... 
public static class WinAPI { 
    public const uint GW_OWNER = 4; 
    [System.Runtime.InteropServices.DllImport("User32.dll")] 
    public static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd); 
} 
+0

这很有趣,但新的WindowInteropHelper(wpfWindow).Handle为关闭的对话框窗口返回零。对话框窗口不处理,因此它们必须具有有效的句柄。 –

+0

是的,我查过了。对于关闭的窗口,返回零; –

+0

@voroninp在最常见的情况下,关闭的窗口根本没有句柄,因为它的句柄在关闭时被破坏......这就是为什么零返回 – DmitryG

相关问题