使winform远离鼠标

时间:2010-03-26 20:34:43

标签: c# .net winforms

好的,所以我正在尝试制作一个可以“逃离”鼠标的小插件程序。

因此,要获得整个屏幕的鼠标坐标,而不仅仅是表单控件,我必须创建一个小帮手:

static class MouseHelper
{
    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    internal static extern bool GetCursorPos(ref Point pt);

    public static Point GetPosition()
    {
        Point w32Mouse = new Point();
        GetCursorPos(ref w32Mouse);
        return w32Mouse;
    }       
}

现在我以为我将使用MouseMove事件...但是这对于窗体控件外部也不起作用,所以我在一个名为timerMouseMove的10ms循环上有一个自动启用的定时器。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private bool CollisionCheck()
    {
        Point win32Mouse = MouseHelper.GetPosition();

        if (win32Mouse.X <= Location.X || win32Mouse.X >= (Location.X + Width))
            return false;

        if (win32Mouse.Y <= Location.Y || win32Mouse.Y >= (Location.Y + Height))
            return false;

        return true;
    }

    private void timerMouseMove_Tick(object sender, EventArgs e)
    {
        if (CollisionCheck())
            Location = new Point(Location.X + 1, Location.Y + 1);
    }
}

所以这很好用,至少我有碰撞检查工作和诸如此类的东西。但是现在,我应该如何计算鼠标碰撞形式的哪一侧,以便我可以更新其位置以便在鼠标与之相撞的相反方向上移动?这样的停顿

1 个答案:

答案 0 :(得分:1)

您随时间捕捉鼠标位置,因此如果您保持“此位置”和“最后位置”,则可以推断出方向。您甚至可以计算速度,如果鼠标移动得更快,可以将表格移动更远的距离。

快乐的愚人节!