将所有者设置为另一个流程表单

时间:2014-09-05 13:26:22

标签: c# .net winforms winapi pinvoke

我有一个表格(父母)。我也从另一个进程处理Form(子)。我需要始终在父级顶部显示子表单,并且可以使用主表单。

当我们打电话时它起作用:

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    private void MainForm_Shown(object sender, EventArgs e)
    {
        var childForm = new Form();
        childForm.Show(this);
    }
}

此外,如果主窗体关闭,则来自其他进程的子窗体将继续工作。

我尝试使用pinvoke SetParent()函数,但它将子窗体设置为MDI。

1 个答案:

答案 0 :(得分:4)

调用SetWindowLongPtr传递GWL_HWNDPARENT作为索引。

SetWindowLongPtr(OwnedWnd, GWL_HWNDPARENT, OwnerWnd);

您可能需要在z顺序中手动将拥有的窗口置于所有者窗口的前面,因为只需调用上述函数就不会发生这种情况。