DirectInput 鍵盤程式設計入門

2021-09-22 23:23:53 字數 1224 閱讀 9297

哦,對了,前一段例程中還提到了立即模式和緩衝模式。在 directinput 中,這兩種工作模式是有區別的。

如果使用立即模式的話,在查詢資料時,只能返回查詢時的裝置狀態。而緩衝模式則將記錄所有裝置狀態變化過程。就個人喜好而言,筆者偏好後者,因為這樣一般不會丟失任何按鍵資訊。對應的,如果在使用前者時的查詢頻度太低,則很難保證採集資料的完整性。

directinput 的資料查詢

立即模式的資料查詢比較簡單,請看下面的示例:

byte diks[256]; // directinput keyboard state buffer 鍵盤狀態資料緩衝區

hresult updateinputstate(void)

}if(failed(hr))

return hr;

}return s_ok;

}在上面的示例中,關鍵處就是使用 getdevicestate 方法來讀取輸入裝置狀態值以及對異常情況的處理。通過使用 getdevicestate 方法,我們把輸入裝置的狀態值放在了乙個 256 位元組的陣列裡。如果該陣列中某個陣列元素的最高位為 1,則表示相應編碼的那個鍵此時正被按下。例如,如果 diks[1]&0x80>0,那麼就表示 esc 鍵正被按下。

學會了立即模式的資料查詢以後,下面我們開始研究緩衝模式的情況:

hresult updateinputstate(void)

}if(failed(hr))

return hr;

}// getdevicedata() 同 getdevicestate() 不一樣,呼叫它之後,

// dwelements 將指明此次呼叫共讀取到了幾條緩衝區記錄

// 我們再用乙個迴圈來處理每條記錄

for(int i=0; i其實,每條記錄還有 dwtimestamp 和 dwsequence 兩個欄位來記錄訊息發生的時間和序列編號,以便作更複雜的處理。本文是針對初學者寫的,就不打算去談論這些內容了。

directinput 的結束處理

我們在使用 directinput 時,還要注意的一件事就是當程式結束時,必須要進行釋放處理,其演示**如下:

void releasedinput(void)

lpdirectinput->release();

lpdirectinput = null;}}

這段**很簡單,就是對 directinput 的各個物件去呼叫 release 方法來釋放資源。這種過程同使用 directx 的其它部分時是基本上相同的。

DirectInput 鍵盤程式設計入門

標籤 directinput 鍵盤入門 遊戲程式設計可不僅僅是圖形程式的開發工作,實際上包含了許多方面,本文所要講述的就是關於如何使用directinput來對鍵盤程式設計的問題。在 dos 時代,我們一般都習慣於接管鍵盤中斷來加入自己的處理 但這一套生存方式在萬惡的 windows 社會下是行不通...

direct input 標準呼叫

讀書筆記 direct input 部分 1.取得idirectinput介面,directinput8create 2.獲得介面後建立裝置 滑鼠,鍵盤.3.設定裝置協作等級,setcooperativelevel 4.設定資料格式,setdataformat 5.獲取裝置,acquire 6.使用...

鍵盤顯示程式設計

include include include include include void defor void defor char dujian int i,k i 1 porta 0x0f if pind 0x0f break if pind 0x0d break if pind 0x0b br...