我有通過處理MouseMove
事件更新2 NumericUpDowns
當前鼠標座標的自定義控件。「鬼」 MouseMove事件
但是我遇到了一個奇怪的情況,即使這種情況不應該發生(我關閉了我的無線鼠標並禁用了觸控板),也會觸發MouseMove
事件。因此,即使鼠標不移動,也會發生MouseMove
。
我做了一個簡單的檢查和核實,這些「鬼」之間的鼠標指針的MouseMove
事件的立場不會改變。我利用這個優勢來確保處理事件的方法只在指針實際移動時被調用,所以我已經能夠滿足我的應用程序的要求。
但是,我仍然感到困惑,因爲我不明白當所有鼠標/觸控板被禁用時,會觸發MouseMove事件。看看Visual Studio中的調用堆棧,在我看來,MouseMove
事件的觸發是「真正的」,就好像鼠標確實移動了一樣,而不像它是由應用程序的其他部分觸發的(例如模擬MouseMove
)。
有關可能是什麼原因的任何建議?謝謝!
編輯:繼景景的建議,我修改了代碼,每次檢測爲MouseMove
消息時打印一個字符串。我注意到,當鼠標關閉並且指針懸停在控件上時,當我按Alt-Tab在應用程序之間切換時,將打印該字符串。也許這與正在重繪的應用程序有關?
知道是否有實際的MouseMove,嘗試重寫'WndProc'並添加此代碼'如果(m.Msg ==在0x200)System.Diagnostics.Debug.Print(「鼠標移動!!!!!!! !!!「);',我想不會有任何'Mouse MOVE !!!!! ...'打印出來。 –
感謝您的建議,不幸的是「鼠標移動!!!!!」被打印。 如果我什麼都沒做,沒有打印。但是,當我使用Alt-Tab在Windows 7上切換應用程序時,「Mouse MOVE !!!!!」打印幾次。只有當鼠標指向懸停控件時纔會發生這種情況。 這可能是由於某些原因重新繪製窗口引起的? – elnigno
兩個想法:[A]你有沒有觸摸屏設備?他們會在Windows 7下以鼠標移動的形式報告,有時需要過濾出來。[B]是連接屏幕協調或應用程序協調的下行鏈路。可能不會,但也許應用程序協作的共同變化會產生影響? – n4m16