在问我的问题之前,请允许我说我在这里以及其他论坛中已经阅读了大约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,扑克应用程序会冻结。
一张照片。我的应用程序是底部的窗口,并在扑克应用程序窗口的左上角创建小表单:
答案 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);
}