2012-10-28 108 views
1

我需要一種比本代碼更精確地跟蹤鼠標座標的方法。如果你運行這段代碼並且快速移動你的鼠標或快速改變方向,座標可能會看起來如下:50,然後是40.當鼠標移動得很快時,它不會跟蹤指針所覆蓋的所有點,就像這樣例如有10個座標跳過。如果我慢慢地移動它,沒有問題。我需要一種方法來跟蹤所有的指針座標而不跳過。我已經嘗試了使用全局鉤子的Code Project上的示例,結果相同。我怎樣才能做到這一點?是否有註冊表更改,可以強制窗口跟蹤所有的座標。可能嗎?我寧願用C#來做,但也會考慮其他方式。謝謝。如何在沒有跳過的情況下精確跟蹤鼠標座標

private void Form1_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (num != 1) 
    { 
     listBox1.Items.Add(e.X.ToString()); 

    } 
} 
+0

好,問題在於,即使在信號到達計算機之前,「跳過」也會發生。你需要插入。哦,並不介意知道*爲什麼*。 –

+0

因爲我需要將鼠標放在一個可靠的區域,即使有一點點也不能逃脫 – FrostyFire

回答

2

鼠標指針不會在每個像素上移動,如果快速移動鼠標,它將在事件之間移動大量像素。硬件不會爲鼠標移動的每個像素髮送一個信號,它會報告自上次報告以來鼠標移動的距離。

,而不是試圖跟蹤這些鼠標,使用Cursor.Clip屬性以限制鼠標的移動:

var rect = someControl.RectangleToScreen(new Rectangle(Point.Empty, someControl.ClientSize)); 
Cursor.Position = new Point(rect.Left + rect.Width/2, rect.Top + rect.Height/2); 
Cursor.Clip = rect; 

使用空矩形鬆開鼠標:

Cursor.Clip = new Rectangle(0, 0, 0, 0); 
+0

謝謝。這是完美的! – FrostyFire

3

是否確定鼠標覆蓋了從A到B的所有座標?

從操作系統的鼠標輸入被採樣,謹慎的數據。這意味着鼠標指針可以跳過座標,就像你看到的一樣。

如果數據不夠高,則考慮對數據進行插值。

IIRC,您可以提高鼠標的採樣率。不記得如何。我相信網絡可以。

0

多年來一直問這個問題。你通常不能告訴鼠標事件監聽器告訴你鼠標經過的每一個像素。如果您足夠快地移動鼠標,即使操作系統可能會跳過大部分屏幕。唯一可靠的方法是根據你給出的鼠標位置的歷史來繪製點。簡單的方法是在當前點和最後一個點之間畫一條線。更復雜的解決方案將涉及存儲最後幾個座標,並使用正弦/正切數學來繪製平滑曲線。