[187] | 1 | 'このファイルには、DirectInputをCOMインターフェイスレベルで扱うための関数が定義されています。
|
---|
| 2 |
|
---|
| 3 |
|
---|
| 4 | '-------------------------------------------------
|
---|
| 5 | ' DirectInputに必要なヘッダファイルをインクルード
|
---|
| 6 | '-------------------------------------------------
|
---|
| 7 | #include <directx9\dinput.sbp>
|
---|
| 8 |
|
---|
| 9 |
|
---|
| 10 | Dim dx_lpDI As LPDIRECTINPUT8 'DirectInputインターフェイス
|
---|
| 11 |
|
---|
| 12 | 'DirectMusicを初期化する関数
|
---|
| 13 | Function dx_InitDInput() As Long
|
---|
| 14 | Dim hr As DWord
|
---|
| 15 |
|
---|
| 16 | hr=DirectInput8Create(GetModuleHandle(0), DIRECTINPUT_VERSION, IID_IDirectInput8,
|
---|
| 17 | VarPtr(dx_lpDI), NULL )
|
---|
| 18 |
|
---|
| 19 | If hr=S_OK Then dx_InitDInput=TRUE Else dx_InitDInput=FALSE
|
---|
| 20 | End Function
|
---|
| 21 |
|
---|
| 22 | ' DirectMusicを終了するための関数
|
---|
| 23 | Sub dx_QuitDInput()
|
---|
| 24 | If dx_lpDI Then dx_lpDI->Release()
|
---|
| 25 | End Sub
|
---|
| 26 |
|
---|
| 27 |
|
---|
| 28 | '----------------
|
---|
| 29 | ' クラス
|
---|
| 30 | '----------------
|
---|
| 31 |
|
---|
| 32 | Class CInputKeyboard
|
---|
| 33 | lpDIDevice As LPDIRECTINPUTDEVICE8
|
---|
| 34 | Public
|
---|
| 35 | Sub CInputKeyboard()
|
---|
| 36 | 'デバイスを生成
|
---|
| 37 | dx_lpDI->CreateDevice(GUID_SysKeyboard,VarPtr(lpDIDevice),NULL)
|
---|
| 38 |
|
---|
| 39 | 'データ形式を設定
|
---|
| 40 | lpDIDevice->SetDataFormat(VarPtr(c_dfDIKeyboard))
|
---|
| 41 |
|
---|
| 42 | '操作レベルを設定
|
---|
| 43 | lpDIDevice->SetCooperativeLevel(hMainWnd, DISCL_FOREGROUND or DISCL_NONEXCLUSIVE)
|
---|
| 44 |
|
---|
| 45 | 'アクセス権の取得
|
---|
| 46 | lpDIDevice->Acquire()
|
---|
| 47 | End Sub
|
---|
| 48 |
|
---|
| 49 | Sub ~CInputKeyboard()
|
---|
| 50 | 'アクセス権を放棄
|
---|
| 51 | lpDIDevice->Unacquire()
|
---|
| 52 |
|
---|
| 53 | 'デバイスを閉じる
|
---|
| 54 | lpDIDevice->Release()
|
---|
| 55 | End Sub
|
---|
| 56 |
|
---|
| 57 | 'キーボードの状態を取得する関数(pKeyStateは256個のByte領域を持つ配列へのポインタ)
|
---|
| 58 | Function GetState(pKeyState As *Char) As Long
|
---|
| 59 | Dim hr As DWord
|
---|
| 60 | hr=lpDIDevice->GetDeviceState(256,pKeyState)
|
---|
| 61 | If hr=S_OK Then GetState=TRUE Else GetState=FALSE
|
---|
| 62 | End Function
|
---|
| 63 | End Class
|
---|
| 64 |
|
---|
| 65 | Class CInputMouse
|
---|
| 66 | lpDIDevice As LPDIRECTINPUTDEVICE8
|
---|
| 67 | Public
|
---|
| 68 | Sub CInputMouse()
|
---|
| 69 | 'デバイスを生成
|
---|
| 70 | dx_lpDI->CreateDevice(GUID_SysMouse,VarPtr(lpDIDevice),NULL)
|
---|
| 71 |
|
---|
| 72 | 'データ形式を設定
|
---|
| 73 | lpDIDevice->SetDataFormat(VarPtr(c_dfDIMouse))
|
---|
| 74 |
|
---|
| 75 | '操作レベルを設定
|
---|
| 76 | lpDIDevice->SetCooperativeLevel(hMainWnd, DISCL_FOREGROUND or DISCL_NONEXCLUSIVE)
|
---|
| 77 |
|
---|
| 78 | 'アクセス権の取得
|
---|
| 79 | lpDIDevice->Acquire()
|
---|
| 80 | End Sub
|
---|
| 81 |
|
---|
| 82 | Sub ~CInputMouse()
|
---|
| 83 | 'アクセス権を放棄
|
---|
| 84 | lpDIDevice->Unacquire()
|
---|
| 85 |
|
---|
| 86 | 'デバイスを閉じる
|
---|
| 87 | lpDIDevice->Release()
|
---|
| 88 | End Sub
|
---|
| 89 |
|
---|
| 90 | 'キーボードの状態を取得する関数(pKeyStateは256個のByte領域を持つ配列へのポインタ)
|
---|
| 91 | Function GetState(pMouseState As *DIMOUSESTATE) As Long
|
---|
| 92 | Dim hr As DWord
|
---|
| 93 | hr=lpDIDevice->GetDeviceState(SizeOf(DIMOUSESTATE),pMouseState)
|
---|
| 94 | If hr=S_OK Then GetState=TRUE Else GetState=FALSE
|
---|
| 95 | End Function
|
---|
| 96 | End Class
|
---|