当SetParent user32.dll时,c#无法关注

时间:2016-04-23 01:00:44

标签: c# user32

我试图为扑克做一个HUD,

所以我的想法是在扑克应用程序(不是我的应用程序)上设置Form,即使我移动扑克桌,也要将表单保持在表格上

enter image description here

所以我使用

从表中获取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但结果相同。

enter image description here

1 个答案:

答案 0 :(得分:1)

您正在调用ShowDialog(),它会显示一个模态窗口,阻止您在关闭模式对话框之前与其他任何内容进行交互。

尝试使用Form.Show()并在每个表单上设置TopMost = true,这样当您点击扑克应用时,它们就不会被掩盖。