ZT DirectInput 滑鼠程式設計入門

2021-04-13 14:19:25 字數 2688 閱讀 6244

2023年10月12日 01:49:00

樊一鵬前回同大家簡單介紹了如何用directinput來進行鍵盤程式設計,本回所要講述的就該是關於如何使用directinput來對另乙個非常重要的輸入裝置----滑鼠的程式設計問題。

滑鼠的程式設計同鍵盤程式設計的過程是非常相似的,有了上次的基礎,你很快就能看出兩者在形式上其實完全是大同小異的。

directinput 的初始化

同前面講鍵盤程式設計的過程一樣,我們還是先從 directinput 的初始化開始吧:

#include 

>

dinput.h

<

#define

dinput_buffersize 16

lpdirectinput lpdirectinput;

//directinput object

lpdirectinputdevice lpmouse;

//directinput device

bool initdinput(hwnd hwnd)

//建立乙個 directinputdevice 介面

hr =

lpdirectinput

-<

createdevice(guid_sy**ouse,

&lpmouse, null);

iffailed(hr)

//設定查詢滑鼠狀態的返回資料格式

hr =

lpmouse

-<

setdataformat(

&c_dfdimouse);

iffailed(hr)

//設定協作模式

hr =

lpmouse

-<

setcooperativelevel(hwnd, discl_exclusive

|discl_foreground);

iffailed(hr)

//設定緩衝區大小

//如果不設定,緩衝區大小預設值為 0,程式就只能按立即模式工作

//如果要用緩衝模式工作,必須使緩衝區大小超過 0

dipropdword property;

property.diph.dwsize

=sizeof

(dipropdword);

property.diph.dwheadersize

=sizeof

(dipropheader);

property.diph.dwobj =0

;property.diph.dwhow

=diph_device;

property.dwdata

=dinput_buffersize;

hr =

lpmouse

-<

setproperty(diprop_buffersize,

&property.diph);

iffailed(hr)

hr =

lpmouse

-<

acquire();

iffailed(hr)

return

true;

}

除了少數幾處改動以外,這段**同前面講的鍵盤程式設計的**基本上完全一樣。

注意呼叫 createdevice 來建立乙個 directinputdevice 介面時,我們用的引數是 guid_sy**ouse 而不是 guid_syskeyboard,我們以此來指明了建立的是滑鼠物件。相應的,在用 setdataformat 來設定返回資料的格式時,我們用的引數是 &c_dfdimouse 而不是 &c_dfdikeyboard。

還有要特別注意的是,前面講到的鍵盤,在設定協作方式時,是只能按非獨佔方式工作的,而滑鼠即可以按非獨佔方式工作,也可以按獨佔方式工作。

directinput 的資料查詢

在作 directinput 的滑鼠資料查詢時,我一般都是使用的緩衝模式而不是立即模式。原因很簡單,因為滑鼠移動事件的頻率很高,按立即模式去處理就很難保證不丟失資料。至於 directx sdk 裡的例程使用立即模式讀取資料則是因為它們用了乙個多**計時器來保證以每秒三十次的頻率處理接受滑鼠資料。

明白這一點後,下面我們就來看看相應的**。由於 directx sdk 裡的例程有立即模式的**,我就偷點懶,下面只給出了一段緩衝模式下的**:

hresult updateinputstate(

void)}

}else

if(elements ==1

)}else

if(elements ==0

) break

; //

緩衝區讀空}}

return

s_ok;}

這段**注釋得非常詳細,相信你很快就能看懂。

directinput 的結束處理

還記得當程式結束時必須要進行的釋放處理吧,其**如下:

ZT DirectInput裡的鍵盤滑鼠的應用

2007年10月12日 01 50 00 設計乙個pc遊戲,鍵盤滑鼠的輸入是絕不能少。windows也提供了諸如 wm lbuttondown wm rbuttonup等滑鼠訊息以及wm keydown wm keyup等鍵盤輸入訊息。但是 directinput中仍然提供了對滑鼠鍵盤的支援,其原因...

從滑鼠手到立式滑鼠

前言 最近感覺右腕有點疼,就學習了一下滑鼠手 腕管綜合症 立式滑鼠這些東西。這個問題和程式設計師的健康相關,小夥伴們可以了解下。什麼是滑鼠手 很多人都聽過滑鼠手,其實它的學名是腕管綜合症。它是指掌管手指的感覺神經 正中神經 在傳導在手腕的腕隧道時,發生神經壓迫,導致大拇指 食指 中指,和無名指靠近中...

滑鼠事件 跟隨滑鼠移動

案例分析 1.滑鼠不斷移動,使用滑鼠移動事件 mousemove 2.在頁面中不斷移動,給document註冊事件 3.要移動距離,而且不佔位置,我們使用絕對定位 效果 跟隨滑鼠的天使 title 6 style 7img 11style 12head 13 body 14 img src pic....