在Windows環境下通過編程來操縱滑鼠、鍵盤是一件再簡單不過的事了,不過大家有沒有想過要嘗試一下另一樣我們比較常見的輸入工具——遊戲操縱杆呢?在某些情況下,尤其是象編製一些小型的遊戲軟體的時候,加入對遊戲操縱杆的支援可以給使用者提供更為友好的人機介面,極大的提高遊戲軟體的可玩性。
C++Builder中沒有專門控制操縱杆函數(其實在常見的程式設計語言中基本上都沒有),因此要增加對遊戲操縱杆的支援,就要和Windows的MCI API函數打交道,這裡我們首先介紹一些在讀取操縱杆的屬性、狀態,位置和按鈕資訊時要用到的API函數、常量及資料結構。
相關常量:
#define MM_JOY1MOVE 0x3A0 /* 用以傳遞操縱杆目前狀態的一些訊息 */
#define MM_JOY2MOVE 0x3A1
#define MM_JOY1ZMOVE 0x3A2
#define MM_JOY2ZMOVE 0x3A3
#define MM_JOY1BUTTONDOWN 0x3B5
#define MM_JOY2BUTTONDOWN 0x3B6
#define MM_JOY1BUTTONUP 0x3B7
#define MM_JOY2BUTTONUP 0x3B8
#define JOY_BUTTON1 0x0001 /* 用以表明當前操縱杆的狀態 */
#define JOY_BUTTON2 0x0002
#define JOY_BUTTON3 0x0004
#define JOY_BUTTON4 0x0008
#define JOY_BUTTON1CHG 0x0100
#define JOY_BUTTON2CHG 0x0200
#define JOY_BUTTON3CHG 0x0400
#define JOY_BUTTON4CHG 0x0800
/* 遊戲操縱杆錯誤傳回值 */
#define JOYERR_BASE 160
#define JOYERR_NOERROR (0) /* 正常 */
#define JOYERR_ParmS (JOYERR_BASE+5) /* 參數錯誤 */
#define JOYERR_NOCANDO (JOYERR_BASE+6) /* 無法正常工作 */
#define JOYERR_UNPLUGGED (JOYERR_BASE+7) /* 操縱杆未串連 */
/* 操縱杆標識號 */
#define JOYSTICKID1 0
#define JOYSTICKID2 1