好的,所以我正在尝试制作一个可以“逃离”鼠标的小插件程序。
因此,要获得整个屏幕的鼠标坐标,而不仅仅是表单控件,我必须创建一个小帮手:
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);
}
}
所以这很好用,至少我有碰撞检查工作和诸如此类的东西。但是现在,我应该如何计算鼠标碰撞形式的哪一侧,以便我可以更新其位置以便在鼠标与之相撞的相反方向上移动?这样的停顿
答案 0 :(得分:1)
您随时间捕捉鼠标位置,因此如果您保持“此位置”和“最后位置”,则可以推断出方向。您甚至可以计算速度,如果鼠标移动得更快,可以将表格移动更远的距离。
快乐的愚人节!