在另一个窗口的顶部保持一个窗口

时间:2012-04-24 09:13:26

标签: c# winforms user32

在问我的问题之前,请允许我说我在这里以及其他论坛中已经阅读了大约30个主题,并且没有一个解决方案对我有用:(

所以,这就是事情。我正在为在线扑克室做一个Hud。所以,我的程序需要在扑克室创建的每个窗口的顶部显示一个表单。

问题是如果我想堆叠多个“桌面窗口”(扑克应用程序创建的那些),如果我的hud设置为最顶层,那么所有桌面顶部都会有所有huds,但是我会喜欢在z顺序中有Hud-Table-Hud-Table-Hu ......等等。

我尝试了几种使用Windows窗体功能和windows api的方法:

this.SetDesktopLocation(rct.Left + p.X, rct.Top + p.Y);

//Or     

Win32Utils.SetParent(this.Handle, this.Table.Handle);

//Or

Win32Utils.SetWindowPos(this.Handle, (int)this.Table.Handle, rct.Left + p.X, rct.Top + p.Y, this.Width, this.Height, (int)1);

//Or

Win32Utils.SetZOrder(this.Handle, this.Table.Handle);

如果是SetZOrder,这里是代码:

    public static void SetZOrder(IntPtr targetHwnd, IntPtr insertAfter)
    {
        IntPtr nextHwnd = IntPtr.Zero;

        SetWindowPos(targetHwnd, insertAfter, 0, 0, 0, 0, SetWindowPosFlags.SWP_NOMOVE | SetWindowPosFlags.SWP_NOSIZE | SetWindowPosFlags.SWP_NOACTIVATE);
    }

所以我不知道还有什么可以尝试。

注意:如果我使用SetParent,扑克应用程序会冻结。

一张照片。我的应用程序是底部的窗口,并在扑克应用程序窗口的左上角创建小表单:

Sample

1 个答案:

答案 0 :(得分:-1)

我认为通过将hud表单的父级设置为表格形式,您可以获得所需内容。像

这样的东西
[STAThread]
static void Main()
{
    const int numWindows = 3;
    for (int i = 0; i < numWindows; i++)
    {
        var tableForm = new Form { Text = @"Table " + i, Size = new Size(400, 400) };
        tableForm.Show();

        var hudForm = new Form { Text = @"Hud " + i, Size = new Size(100,100) };
        hudForm.Show(tableForm);
    }

    var rootForm = new Form();
    Application.Run(rootForm);
}