2012-04-24 82 views
3

之前问我的问题,让我说,我已经在这里阅读约30个线程和其他论坛,并没有一个解决方案已经为我工作:(保持在另一个窗口上方的窗口

所以,这里的我在做一个Hud for在线扑克室,所以我的程序需要在扑克室创建的每个窗口上显示一个表格

问题是如果我想堆叠多个“表格窗口“(扑克应用程序创建的那些),如果我的hud设置为最高,则所有表中都有huds,但我想要的顺序是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

+0

什么是hud?用户是否与顶级形式交互或仅仅是装饰性的?如果用户抓住标题栏并移动它,这两种形式是否会一起移动?图片可能有帮助。 – LarsTech 2012-04-24 12:41:35

+0

HUD =抬头显示,是吗?扑克应用程序是否有控制权,或者您为什么使用api调用将您的hud附加到表窗口? – roken 2012-04-24 12:49:57

+0

HUD =抬头显示,右边。当我回家时,我会张贴几张图片,但同时: LarsTech:“HUD”窗体显示信息并显示工具提示,因此它必须能够响应鼠标输入。是的,他们应该搬家。在这个时候,我通过一个计时器来完成这个工作,并在每个计时器时刻重新定位我的表格。 roken:我无法控制扑克的应用程序。我只是根据一些日志文件显示信息。我使用API​​调用来了解何时创建窗口,然后创建并定位我的HUD。 – 2012-04-24 13:21:56

回答

-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); 
} 
+0

表格不是我的,所以我不能这样做。 无论如何,从windows api使用SetParent会让主机应用程序冻结:S – 2012-11-16 11:46:06

相关问题