3

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

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

问题是,如果我想堆叠多个“桌面窗口”(扑克应用程序创建的窗口),如果我的 hud 设置为最顶层,那么所有表的顶部都有 ALL hud,但我想要的是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,扑克应用程序会冻结。

照片。我的应用是底部的窗口,在扑克应用窗口的左上角创建小窗体:

样本

4

1 回答 1

-1

我认为你可以通过将 hud 表单的父级设置为 table 表单来获得你想要的。就像是

[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);
}
于 2012-11-15T12:19:45.967 回答