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

时间:2011-05-26 22:30:31

标签: c# wpf windows createwindow

我希望使用C#窗口创建设置父级到我定义的句柄, 这是另一个进程窗口句柄。

任何人都知道怎么做?

问候,

2 个答案:

答案 0 :(得分: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窗体特有的。

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

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

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

我在显示WPF窗口后很快就尝试了这个,它似乎按预期工作,但WPF知识不是很好。

答案 1 :(得分:3)

我相信Handle将是只读的;因此,.Parent属性是只读的。但是,.Owner属性具有getter和setter(ref. MSDN)...但是,您必须具有对Parent窗口的引用。

如果没有更多信息,我将无法提供更多信息。

如果您的父母候选人是非托管窗口,请检查此link