我試圖在我的應用程序中實現一個功能,將光標捕捉到場景中的網格邊緣。現在,我確實有框架採取當前MouseMove提供e.Location並轉換到我的世界座標和回到屏幕 - 和值相匹配。請參閱以下基本代碼概述。如何知道MouseMove之前的鼠標位置
public void Scene_MouseMove(object sender, MouseEventArgs e)
{
Vector2 world = ScreenToWorld(e.Location);
---> Check here to make sure the world coordinates returned
fall inside my grid scene edges.
if (world.X < Grid.Left) world.x = Grid.Left;
Point target = WorldToScreen(world);
// set cursr desired position
Cursor.Position = (sender as PictureBox).PointToScreen(target);
}
我遇到的問題是,MouseMove事件獲取調用後的事實是鼠標在移動,所以,當我打我的網格的邊我看到鼠標的過沖一幀,然後糾正自己。這會導致光標在我移動鼠標時抖動。我想這樣做,當我碰到邊緣時,光標停在它的軌道上,但我不知道如何在鼠標移動之前捕捉數據!
也許我正在談論這個錯誤,所以任何建議將不勝感激。
僅供參考 - 這是我試圖實現的SnapToGrid功能的第一部分。
編輯:一個簡單的例子:
你可以看到運行我的問題下面的簡單的例子。注意當你移動它時,光標是如何閃爍每一幀的?
bool g_Set = false;
public void Scene_MouseMove(object sender, MouseEventArgs e)
{
// stop MouseMove from flooding the control recursively
if(g_Set) { g_Set = false; return; }
g_Set = true;
Cursor.Position = new Point(400,400);
}
在API中不支持C#什麼來捕捉的MouseMove它實際上移動光標之前,還是應該我只是尋找到實現我自己的Cursor類隱藏Form.Cursor,只是渲染礦(我還需要查看其他內容,因爲我對該功能沒有任何線索)。
如果這是WPF,你可能想看看[這個答案](HTTP://計算器。 com/questions/850956/how-to-limit-cursor-movement-in-wpf-based-app) – 2013-03-07 03:33:21
您是否想將光標剪輯到窗口? http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.clip.aspx。另請參閱http://stackoverflow.com/q/15029274/56778 – 2013-03-07 03:46:25
如果這是WinForms,則「捕獲」屬性(可從任何地方爲您提供鼠標事件)可能會有所幫助。 – RoadBump 2013-03-07 04:07:25