簡體   English   中英

獲取原始鼠標移動(不是屏幕位置)

[英]Get raw mouse movement (not screen position)

我一直在使用xna Mouse類,並且能夠獲得每幀鼠標移動的唯一方法是每次將鼠標重置到屏幕中心,然后在將其放回中心之前測量位移。 這似乎有點駭人聽聞,而且我的鼠標支持5700dpi的分辨率,但是當xna返回屏幕位置的整數時,我幾乎肯定不會得到這種分辨率。

如果使用Mouse.SetPosition並無法測量偏移量,則需要使用XNA以外的API。

您要使用的API是WM_INPUT 這是您可以通過鈎住消息循環來接收的消息。 (注意:XNA的API等效於WM_MOUSEMOVE ,因此不要使用它。)

此MSDN頁面包含有關API選擇的一些介紹性詳細信息,並提供了一些示例代碼(在C ++中),用於將其用於鼠標輸入。

如果您不熟悉Windows消息循環,則可以從Wikipedia開始。 從根本上說,它是本機(C / C ++)API,因此您必須做一些工作才能從C#中使用它。

我自己沒有任何代碼可以方便地進行此操作,但是這里有一個鏈接,指向某人掛了消息循環,以便他們可以處理WM_CHAR ,這也許是一個很好的起點。

最近,我本人放棄了MouseMove的怪癖,發現這樣做很有幫助。 但是,SharpDX似乎已經將其中的大部分內容包裝在RawInput模塊中,因此對我來說已經足夠了。 除非這樣做,否則可以通過重寫WndProc來掛鈎Windows.System.Forms的消息循環; WM_INPUT是消息ID 0x00FF; 在.NET中聲明聯合非常棘手,需要[StructLayout]屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM