C#创建窗口-定义父窗口

6

我想用C#创建一个窗口,并将其设置为我的定义句柄的父窗口,该句柄是其他进程的窗口句柄。

有人知道如何做吗?

问候,

2个回答

7
如果我理解您的问题正确,您应该可以通过使用类似以下代码来实现您想要的功能:
class Win32Window : IWin32Window
{
    IntPtr handle;

    public Win32Window(IntPtr handle) { this.handle = handle; }

    public IntPtr Handle
    {
        get { return this.handle; }
    }
}

static void Main()
{
    IntPtr targetParent = // Get handle to the parent window

    new MainForm().ShowDialog(new Win32Window(targetParent));
}

这将把MainForm变成指定窗口的子窗口,使其始终显示在其上方。在示例中,我使用了ShowDialog,但是对于Show也应该适用。这仅适用于Windows Forms。

在WPF中,您可以尝试以下操作:

var helper = new WindowInteropHelper(/* your Window instance */);

helper.Owner = // Set with handle for the parent

在展示WPF窗口后,我快速尝试了这个方法,它似乎按预期工作,但我对WPF的了解并不是很深。


好的,我会尝试这个,但是...这对于Window类来说是不可能的吗?我已经有基于带有XAML的Window的代码了。 - Svisstack
我假设这是Windows窗体,所以对于WPF窗口并不适用。 - João Angelo
我在WPF中更新了答案,并提供了可能的解决方案,但我不做任何保证... :) - João Angelo

3
我相信Handle将是只读的;因此,.Parent属性是只读的。然而,.Owner属性有一个getter和一个setter(ref. MSDN)... 但是,你必须拥有对父窗口的引用。
如果你的父级候选是一个未管理的窗口,请查看这个link

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接