将鼠标置于UI元素上

BH

谢谢参观。

在我的桌面应用程序中,每当按下特定按钮时,我都希望将鼠标移至应用程序窗口的中心。为此,我将获取主窗口的位置,宽度和高度,然后使用User32.dll根据这些值设置鼠标光标的位置。

鼠标光标已移动,但是始终始终偏离中心。它的位置受pos,宽度和高度的影响,但是在测量所需的位置和设置之间似乎存在一些奇怪的缩放问题。基于这个问题及其重复,这就是我正在使用的内容:

  static public double GetWindowLeft(Window window)
    {
        if (window.WindowState == WindowState.Maximized)
        {
            var leftField = typeof(Window).GetField("_actualLeft", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            return (double)leftField.GetValue(window);
        }
        else
            return window.Left;
    }

    static public double GetWindowTop(Window window)
    {
        if (window.WindowState == WindowState.Maximized)
        {
            var leftField = typeof(Window).GetField("_actualTop", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            return (double)leftField.GetValue(window);
        }
        else
            return window.Top;

    }


    static public void SetPosition(int a, int b)
    {
        SetCursorPos(a, b);
    }

    [DllImport("User32.dll")]
    private static extern bool SetCursorPos(int X, int Y);

}

并在MainWindow方法中:

 private void CenterMouse(object sender, RoutedEventArgs e)
    {

        double top = UCMethods.GetWindowTop(this);
        double left = UCMethods.GetWindowLeft(this);

        SetPosition((int)(left+left+ActualWidth) / 2, (int)(top + top + ActualHeight) / 2);
    }

编辑:这似乎在我朋友的计算机上运行良好,但是在我的机器上有补偿。我离屏幕左上角(0,0)越远,鼠标光标在该方向上的滞后时间就越大(鼠标光标在左上方向上偏移)。这个问题怎么可能是特定于设备的?

BH

我也在其他地方问过这个问题,并在那里的帮助下设法解决了这个问题。链接到解决方案

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章