| 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
|
|---|