2010-03-26 42 views
0

好吧,我正在嘗試做一個小小的gag程序,它會從鼠標「逃走」。讓winform遠離鼠標

因此,要獲得鼠標座標整個屏幕,而不僅僅是形式的控制,我不得不創建一個小幫手:

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); 
    } 
} 

所以這工作得很好,至少我有碰撞檢查工作和whatnot。但現在,我應該如何確定鼠標碰撞的形狀的哪一側,以便我可以更新其位置,以便鼠標與它發生相反的方向移動?而且這樣的halp

回答

1

隨着時間的推移捕獲鼠標位置,所以你可以推斷方向,如果你保持「這個位置」和「最後的位置」。您甚至可以計算速度,並且如果鼠標移動得更快,則將窗體移動更遠的距離。

快樂的愚人節!