我试图为扑克做一个HUD,
所以我的想法是在扑克应用程序(不是我的应用程序)上设置Form
,即使我移动扑克桌,也要将表单保持在表格上
所以我使用
从表中获取IntPtr [DllImport("user32.dll")]
public static extern int EnumWindows(EnumWindowsCallback lpEnumFunc, int lParam);
我需要桌上每位玩家Form
来显示有关玩家的信息
所以我创建了我使用
附加到扑克桌的表单[DllImport("user32.dll")]
private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
但是当我展示表格时,我失去了焦点!我无法点击扑克桌或主框架。一个解决方案?
private void displayHudForEachPlayer(IntPtr pokerTable) {
StringBuilder windowTitle = new StringBuilder(256);
GetWindowText(pokerTable, windowTitle, windowTitle.Capacity);
if (windowTitle.ToString().Contains("Real money"))
{
HudPlayerView hudPlayer1 = new HudPlayerView();
//hudPlayer1.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
Console.WriteLine(windowTitle.ToString());
IntPtr childHandle = hudPlayer1.Handle;
ParentWndWrapper oParentWnd = new ParentWndWrapper(pokerTable);
SetParent(childHandle, pokerTable);
hudPlayer1.SetBounds(0, 0, 100, 50);
hudPlayer1.ShowDialog();
}
}
我也试过
IWin32Window w = Control.FromHandle(pokerTable);
hudPlayer1.ShowDialog(w);
而不是SetParent但结果相同。
答案 0 :(得分:1)
您正在调用ShowDialog()
,它会显示一个模态窗口,阻止您在关闭模式对话框之前与其他任何内容进行交互。
尝试使用Form.Show()
并在每个表单上设置TopMost = true
,这样当您点击扑克应用时,它们就不会被掩盖。