0

我正在为 Pokerstars 构建一个 HUD 以显示一些相关的统计数据。

Overlay 是一个 UserControl : Form,我通过 winapi 将其从状态栏和 Alt+T 中隐藏起来。acutally 它有一个 TopMost,总是在 Pokertable 上,但这会导致一些副作用:

我附上了一个截图来显示我的问题

  • 1:一切正常
  • 2:我的网络浏览器只覆盖了 Pokertable 的一部分,在这种情况下,HUD 显示(好的!)
  • 3:浏览器覆盖了放置 HUD 的 Pokertable 区域。在这种情况下,我的 HUD 不应该是 TopMost;

我拥有的数据:

  • IntPtr 句柄(PokerTable 的)
  • 点位置(在屏幕上)
  • 点大小(从窗口)

哪个WinAPI函数可以帮助ne?有人知道一些例子吗?我敢肯定,这是可能的,有 Porgrams (PokerTracker, HoldemManager) 解决了这个挑战。

我使用的 TopMost 始终位于 PokerTable 的顶部。所以如果用户点击它,HUD可能不会被覆盖。

3个案例


//编辑

我现在用一个 1ms 间隔的定时器来做这件事,它的工作率为 60%,有一些副作用。比什么都好

   if (GetForegroundWindow() == TableHandle) {
            this.TopMost = true;
        } else {
            this.TopMost = false;
        }

4

1 回答 1

0

我自己想出来的-我们开始吧!

public class WinAPI {
    [DllImport("user32.dll")]
    public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, uint dwNewLong);

    public const int GWL_HWNDPARENT = -8;
}


WinAPI.SetWindowLong(this.Handle, WinAPI.GWL_HWNDPARENT, (uint)this.ObservedHandle);
于 2012-08-10T00:30:57.747 回答