• R/O
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。


Commit MetaInfo

Revision257 (tree)
Time2021-01-23 19:17:15
Authorxops-mikan

Log Message

入力処理にRawInputを追加(オプション)、コンソールのverコマンドで使用している入力処理を表示するように。

Change Summary

Incremental Difference

--- trunk/gamemain.cpp (revision 256)
+++ trunk/gamemain.cpp (revision 257)
@@ -4367,7 +4367,7 @@
43674367 if( strcmp(NewCommand, "ver") == 0 ){
43684368 sprintf(str, "%s Version:%s", GAMENAME, GAMEVERSION);
43694369 AddInfoConsole(d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), str);
4370- sprintf(str, " (Graphics:%s Sound:%s)", GRAPHICS_CORE, SOUND_CORE);
4370+ sprintf(str, " (Graphics:%s Sound:%s Input:%s)", GRAPHICS_CORE, SOUND_CORE, INPUT_CORE);
43714371 AddInfoConsole(d3dg->GetColorCode(1.0f,1.0f,1.0f,1.0f), str);
43724372 }
43734373
--- trunk/input.cpp (revision 256)
+++ trunk/input.cpp (revision 257)
@@ -34,7 +34,7 @@
3434 //! @brief コンストラクタ
3535 InputControl::InputControl()
3636 {
37-#ifdef INPUT_DIRECTINPUT
37+#if INPUT_INTERFACE == 2
3838 pDI = NULL;
3939 pDIDevice = NULL;
4040 pMouse = NULL;
@@ -55,6 +55,14 @@
5555 mbr = false;
5656 mbl_lt = mbl;
5757 mbr_lt = mbr;
58+
59+#if INPUT_INTERFACE == 1
60+ memcpy(keys_proc, keys, sizeof(char)*256);
61+ mx_proc = 0;
62+ my_proc = 0;
63+ mbl_proc = mbl;
64+ mbr_proc = mbr;
65+#endif
5866 }
5967
6068 //! @brief ディストラクタ
@@ -70,10 +78,12 @@
7078 {
7179 #ifdef ENABLE_DEBUGLOG
7280 //ログに出力
73- #ifdef INPUT_DIRECTINPUT
81+ #if INPUT_INTERFACE == 0
82+ OutputLog.WriteLog(LOG_INIT, "入力", "WindowsInput");
83+ #elif INPUT_INTERFACE == 1
84+ OutputLog.WriteLog(LOG_INIT, "入力", "RawInput");
85+ #elif INPUT_INTERFACE == 2
7486 OutputLog.WriteLog(LOG_INIT, "入力", "DirectInput");
75- #else
76- OutputLog.WriteLog(LOG_INIT, "入力", "WinAPI");
7787 #endif
7888 #endif
7989
@@ -80,7 +90,29 @@
8090 //ウィンドウハンドルを設定
8191 hWnd = WindowCtrl->GethWnd();
8292
83-#ifdef INPUT_DIRECTINPUT
93+#if INPUT_INTERFACE == 1
94+ RAWINPUTDEVICE Rid[2];
95+
96+ //マウス
97+ Rid[0].usUsagePage = 0x01;
98+ Rid[0].usUsage = 0x02;
99+ Rid[0].dwFlags = NULL;//RIDEV_NOLEGACY;
100+ Rid[0].hwndTarget = 0;
101+
102+ //キーボード
103+ Rid[1].usUsagePage = 0x01;
104+ Rid[1].usUsage = 0x06;
105+ Rid[1].dwFlags = NULL;//RIDEV_NOLEGACY;
106+ Rid[1].hwndTarget = 0;
107+
108+ //WM_INPUTで取得するデバイスを登録
109+ if( RegisterRawInputDevices(Rid, 2, sizeof(Rid[0])) == FALSE ){
110+ return 1;
111+ }
112+
113+ //プロシージャ登録
114+ SetWindowSubclass(hWnd, SubClassProc, 1, (DWORD_PTR)this);
115+#elif INPUT_INTERFACE == 2
84116 //DirectInput初期化
85117 if( FAILED( DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&pDI, NULL) ) ){
86118 return 1;
@@ -105,7 +137,7 @@
105137 //カーソルを非表示
106138 ShowCursor(false);
107139
108-#ifndef INPUT_DIRECTINPUT
140+#if INPUT_INTERFACE != 2
109141 InitFlag = true;
110142 #endif
111143
@@ -121,13 +153,20 @@
121153 //! @attention 本関数は自動的に呼び出されますが、明示的に呼び出すことも可能です。
122154 void InputControl::DestroyInput()
123155 {
124-#ifdef INPUT_DIRECTINPUT
156+#if INPUT_INTERFACE != 2
157+ if( InitFlag == false ){ return; }
158+#else
125159 if( (pDI == NULL)&&(pDIDevice == NULL)&&(pMouse == NULL) ){ return; }
126-#else
127- if( InitFlag == false ){ return; }
128160 #endif
129161
130-#ifdef INPUT_DIRECTINPUT
162+#if INPUT_INTERFACE == 0
163+ InitFlag = false;
164+#elif INPUT_INTERFACE == 1
165+ InitFlag = false;
166+
167+ //プロシージャ解放
168+ RemoveWindowSubclass(hWnd, SubClassProc, 1);
169+#elif INPUT_INTERFACE == 2
131170 //キーボードデバイスを開放
132171 if( pDIDevice != NULL ){
133172 pDIDevice->Unacquire();
@@ -147,25 +186,108 @@
147186 pDI->Release();
148187 pDI = NULL;
149188 }
150-#else
151- InitFlag = false;
152189 #endif
153190
154191 #ifdef ENABLE_DEBUGLOG
155192 //ログに出力
156- #ifdef INPUT_DIRECTINPUT
193+ #if INPUT_INTERFACE == 0
194+ OutputLog.WriteLog(LOG_CLEANUP, "入力", "WindowsInput");
195+ #elif INPUT_INTERFACE == 1
196+ OutputLog.WriteLog(LOG_CLEANUP, "入力", "RawInput");
197+ #elif INPUT_INTERFACE == 2
157198 OutputLog.WriteLog(LOG_CLEANUP, "入力", "DirectInput");
158- #else
159- OutputLog.WriteLog(LOG_CLEANUP, "入力", "WinAPI");
160199 #endif
161200 #endif
162201 }
163202
203+#if INPUT_INTERFACE == 1
204+//! @brief RowInputを取得するプロシージャ
205+LRESULT CALLBACK InputControl::SubClassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
206+ UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
207+{
208+ //未使用引数対策
209+ UNREFERENCED_PARAMETER(uIdSubclass);
210+
211+ if( uMsg == WM_INPUT ){
212+ InputControl* input = (InputControl*)dwRefData;
213+ input->GetRowInput(wParam, lParam);
214+ }
215+ return DefSubclassProc(hWnd, uMsg, wParam, lParam);
216+}
217+
218+//! @brief プロシージャからRowInput取得
219+void InputControl::GetRowInput(WPARAM wParam, LPARAM lParam)
220+{
221+ //未使用引数対策
222+ UNREFERENCED_PARAMETER(wParam);
223+
224+ UINT dwSize;
225+
226+ //RowInputサイズ取得
227+ GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
228+ LPBYTE lpb = new BYTE[dwSize];
229+ if( lpb == NULL ){ return; }
230+
231+ //RowInput実データ取得
232+ if( GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)) != dwSize ){
233+ return;
234+ }
235+
236+ RAWINPUT* raw = (RAWINPUT*)lpb;
237+
238+ //キーボード
239+ if( raw->header.dwType == RIM_TYPEKEYBOARD ){
240+ if( (raw->data.keyboard.Flags&0x01) == RI_KEY_MAKE ){ //キーが押された
241+ int Vkey = raw->data.keyboard.VKey;
242+ keys_proc[Vkey] = (char)0x80;
243+ }
244+ if( (raw->data.keyboard.Flags&0x01) == RI_KEY_BREAK ){ //キーが離された
245+ int Vkey = raw->data.keyboard.VKey;
246+ keys_proc[Vkey] = (char)0x00;
247+ }
248+ }
249+
250+ //マウス
251+ if( raw->header.dwType == RIM_TYPEMOUSE ){
252+ if( (raw->data.mouse.usButtonFlags&RI_MOUSE_LEFT_BUTTON_DOWN) != 0 ){ //左ボタンが押された
253+ mbl_proc = true;
254+ }
255+ if( (raw->data.mouse.usButtonFlags&RI_MOUSE_LEFT_BUTTON_UP) != 0 ){ //左ボタンが離された
256+ mbl_proc = false;
257+ }
258+ if( (raw->data.mouse.usButtonFlags&RI_MOUSE_RIGHT_BUTTON_DOWN) != 0 ){ //右ボタンが押された
259+ mbr_proc = true;
260+ }
261+ if( (raw->data.mouse.usButtonFlags&RI_MOUSE_RIGHT_BUTTON_UP) != 0 ){ //右ボタンが離された
262+ mbr_proc = false;
263+ }
264+
265+ //マウス座標加算
266+ mx_proc += (int)raw->data.mouse.lLastX;
267+ my_proc += (int)raw->data.mouse.lLastY;
268+ }
269+
270+ delete[] lpb;
271+}
272+#endif
273+
164274 //! @brief 入力デバイスの状態を更新
165275 //! @param mousemode マウスの座標取得 絶対値(座標):false 相対値(移動量):true
166276 void InputControl::GetInputState(bool mousemode)
167277 {
168-#ifdef INPUT_DIRECTINPUT
278+#if INPUT_INTERFACE == 0
279+ //取得直前のキー情報を、前フレーム情報として記録
280+ memcpy(keys_lt, keys, sizeof(char)*256);
281+
282+ //現在のキーボード入力を取得
283+ GetKeyboardState((PBYTE)&keys);
284+#elif INPUT_INTERFACE == 1
285+ //取得直前のキー情報を、前フレーム情報として記録
286+ memcpy(keys_lt, keys, sizeof(char)*256);
287+
288+ //現在のキーボード入力を取得
289+ memcpy(keys, keys_proc, sizeof(char)*256);
290+#elif INPUT_INTERFACE == 2
169291 //キーボードデバイスが正しく使用できれば
170292 if( pDIDevice != NULL ){
171293 HRESULT hr = pDIDevice->Acquire();
@@ -177,12 +299,6 @@
177299 pDIDevice->GetDeviceState(sizeof(keys), &keys);
178300 }
179301 }
180-#else
181- //取得直前のキー情報を、前フレーム情報として記録
182- memcpy(keys_lt, keys, sizeof(char)*256);
183-
184- //現在のキーボード入力を取得
185- GetKeyboardState((PBYTE)&keys);
186302 #endif
187303
188304 POINT point;
@@ -191,7 +307,53 @@
191307 GetCursorPos(&point);
192308 ScreenToClient(hWnd, &point);
193309
194-#ifdef INPUT_DIRECTINPUT
310+#if INPUT_INTERFACE == 0
311+ //マウス座標を出力
312+ if( mousemode == false ){
313+ mx = point.x;
314+ my = point.y;
315+ }
316+ else{
317+ mx = point.x - point_lt.x;
318+ my = point.y - point_lt.y;
319+ }
320+
321+ //マウス座標を前フレーム情報として記録
322+ point_lt = point;
323+
324+
325+ //取得直前のボタン情報を、前フレーム情報として記録
326+ mbl_lt = mbl;
327+ mbr_lt = mbr;
328+
329+ //マウスのボタンを取得
330+ if( GetKeyState(VK_LBUTTON) < 0 ){ mbl = true; }
331+ else{ mbl = false; }
332+ if( GetKeyState(VK_RBUTTON) < 0 ){ mbr = true; }
333+ else{ mbr = false; }
334+#elif INPUT_INTERFACE == 1
335+ //マウス座標を出力
336+ if( mousemode == false ){
337+ mx = point.x;
338+ my = point.y;
339+ }
340+ else{
341+ mx = mx_proc;
342+ my = my_proc;
343+ }
344+
345+ mx_proc = 0;
346+ my_proc = 0;
347+
348+
349+ //取得直前のボタン情報を、前フレーム情報として記録
350+ mbl_lt = mbl;
351+ mbr_lt = mbr;
352+
353+ //マウスのボタンを取得
354+ mbl = mbl_proc;
355+ mbr = mbr_proc;
356+#elif INPUT_INTERFACE == 2
195357 //マウスデバイスが正しく初期化されていれば
196358 if( pMouse != NULL ){
197359 //マウス情報を取得(DirectInput)
@@ -220,30 +382,6 @@
220382 if( dIMouseState.rgbButtons[1]&0x80 ){ mbr = true; }
221383 else{ mbr = false; }
222384 }
223-#else
224- //マウス座標を出力
225- if( mousemode == false ){
226- mx = point.x;
227- my = point.y;
228- }
229- else{
230- mx = point.x - point_lt.x;
231- my = point.y - point_lt.y;
232- }
233-
234- //マウス座標を前フレーム情報として記録
235- point_lt = point;
236-
237-
238- //取得直前のボタン情報を、前フレーム情報として記録
239- mbl_lt = mbl;
240- mbr_lt = mbr;
241-
242- //マウスのボタンを取得
243- if( GetKeyState(VK_LBUTTON) < 0 ){ mbl = true; }
244- else{ mbl = false; }
245- if( GetKeyState(VK_RBUTTON) < 0 ){ mbr = true; }
246- else{ mbr = false; }
247385 #endif
248386 }
249387
@@ -256,8 +394,10 @@
256394 point.x = SCREEN_WIDTH/2;
257395 point.y = SCREEN_HEIGHT/2;
258396
397+#if INPUT_INTERFACE == 0
259398 //前回の座標を書き換え
260399 point_lt = point;
400+#endif
261401
262402 //スクリーン座標に変換し、座標変更
263403 ClientToScreen(hWnd, &point);
@@ -401,16 +541,100 @@
401541 return -1;
402542 }
403543
404-//! @brief オリジナルキーコードをDirectInputキーコードへ変換
544+//! @brief オリジナルキーコードから取得用キーコードへ変換
405545 //! @param code オリジナルキーコード
406-//! @return 1以上:DirectInputキーコード -1以下:特殊 0:失敗
546+//! @return 1以上:取得用キーコード -1以下:特殊 0:失敗
407547 //! @attention 以下、特殊な戻り値の場合―<br>-1:MOUSE L  -2:MOUSE R  -3:DIK_LSHIFT / DIK_RSHIFT  -4:DIK_LCONTROL / DIK_RCONTROL
408548 int OriginalkeycodeToDinputdef(int code)
409549 {
410550 int out = 0;
411551
412-#ifdef INPUT_DIRECTINPUT
552+#if INPUT_INTERFACE != 2
413553 switch(code){
554+ case 0x00: out = VK_UP; break;
555+ case 0x01: out = VK_DOWN; break;
556+ case 0x02: out = VK_LEFT; break;
557+ case 0x03: out = VK_RIGHT; break;
558+ case 0x04: out = VK_NUMPAD0; break;
559+ case 0x05: out = VK_NUMPAD1; break;
560+ case 0x06: out = VK_NUMPAD2; break;
561+ case 0x07: out = VK_NUMPAD3; break;
562+ case 0x08: out = VK_NUMPAD4; break;
563+ case 0x09: out = VK_NUMPAD5; break;
564+ case 0x0A: out = VK_NUMPAD6; break;
565+ case 0x0B: out = VK_NUMPAD7; break;
566+ case 0x0C: out = VK_NUMPAD8; break;
567+ case 0x0D: out = VK_NUMPAD9; break;
568+ case 0x0E: out = VK_BACK; break;
569+ case 0x0F: out = VK_RETURN; break;
570+
571+ case 0x10: out = VK_TAB; break;
572+ case 0x11: out = VK_SPACE; break;
573+ case 0x12: out = -1; break; //MOUSE L
574+ case 0x13: out = -2; break; //MOUSE R
575+ case 0x14: out = VK_SHIFT; break;
576+ case 0x15: out = VK_CONTROL; break;
577+ case 0x16: out = '0'; break;
578+ case 0x17: out = '1'; break;
579+ case 0x18: out = '2'; break;
580+ case 0x19: out = '3'; break;
581+ case 0x1A: out = '4'; break;
582+ case 0x1B: out = '5'; break;
583+ case 0x1C: out = '6'; break;
584+ case 0x1D: out = '7'; break;
585+ case 0x1E: out = '8'; break;
586+ case 0x1F: out = '9'; break;
587+
588+ case 0x20: out = 'A'; break;
589+ case 0x21: out = 'B'; break;
590+ case 0x22: out = 'C'; break;
591+ case 0x23: out = 'D'; break;
592+ case 0x24: out = 'E'; break;
593+ case 0x25: out = 'F'; break;
594+ case 0x26: out = 'G'; break;
595+ case 0x27: out = 'H'; break;
596+ case 0x28: out = 'I'; break;
597+ case 0x29: out = 'J'; break;
598+ case 0x2A: out = 'K'; break;
599+ case 0x2B: out = 'L'; break;
600+ case 0x2C: out = 'M'; break;
601+ case 0x2D: out = 'N'; break;
602+ case 0x2E: out = 'O'; break;
603+ case 0x2F: out = 'P'; break;
604+
605+ case 0x30: out = 'Q'; break;
606+ case 0x31: out = 'R'; break;
607+ case 0x32: out = 'S'; break;
608+ case 0x33: out = 'T'; break;
609+ case 0x34: out = 'U'; break;
610+ case 0x35: out = 'V'; break;
611+ case 0x36: out = 'W'; break;
612+ case 0x37: out = 'X'; break;
613+ case 0x38: out = 'Y'; break;
614+ case 0x39: out = 'Z'; break;
615+ case 0x3A: out = VK_OEM_2; break;
616+ case 0x3B: out = VK_OEM_1; break;
617+ case 0x3C: out = VK_OEM_PLUS; break;
618+ case 0x3D: out = VK_OEM_MINUS; break;
619+ case 0x3E: out = VK_OEM_3; break;
620+ case 0x3F: out = VK_OEM_4; break;
621+
622+ case 0x40: out = VK_OEM_6; break;
623+ case 0x41: out = VK_OEM_102; break;
624+ case 0x42: out = VK_OEM_5; break;
625+ case 0x43: out = VK_OEM_COMMA; break;
626+ case 0x44: out = VK_OEM_PERIOD; break;
627+ case 0x45: out = VK_OEM_7; break;
628+ case 0x46: out = VK_MULTIPLY ; break;
629+ case 0x47: out = VK_DIVIDE; break;
630+ case 0x48: out = VK_ADD; break;
631+ case 0x49: out = VK_SUBTRACT; break;
632+ case 0x4A: out = VK_DECIMAL; break;
633+
634+ default : out = 0;
635+ }
636+#else
637+ switch(code){
414638 case 0x00: out = DIK_UP; break;
415639 case 0x01: out = DIK_DOWN; break;
416640 case 0x02: out = DIK_LEFT; break;
@@ -493,90 +717,6 @@
493717
494718 default : out = 0;
495719 }
496-#else
497- switch(code){
498- case 0x00: out = VK_UP; break;
499- case 0x01: out = VK_DOWN; break;
500- case 0x02: out = VK_LEFT; break;
501- case 0x03: out = VK_RIGHT; break;
502- case 0x04: out = VK_NUMPAD0; break;
503- case 0x05: out = VK_NUMPAD1; break;
504- case 0x06: out = VK_NUMPAD2; break;
505- case 0x07: out = VK_NUMPAD3; break;
506- case 0x08: out = VK_NUMPAD4; break;
507- case 0x09: out = VK_NUMPAD5; break;
508- case 0x0A: out = VK_NUMPAD6; break;
509- case 0x0B: out = VK_NUMPAD7; break;
510- case 0x0C: out = VK_NUMPAD8; break;
511- case 0x0D: out = VK_NUMPAD9; break;
512- case 0x0E: out = VK_BACK; break;
513- case 0x0F: out = VK_RETURN; break;
514-
515- case 0x10: out = VK_TAB; break;
516- case 0x11: out = VK_SPACE; break;
517- case 0x12: out = -1; break; //MOUSE L
518- case 0x13: out = -2; break; //MOUSE R
519- case 0x14: out = VK_SHIFT; break;
520- case 0x15: out = VK_CONTROL; break;
521- case 0x16: out = '0'; break;
522- case 0x17: out = '1'; break;
523- case 0x18: out = '2'; break;
524- case 0x19: out = '3'; break;
525- case 0x1A: out = '4'; break;
526- case 0x1B: out = '5'; break;
527- case 0x1C: out = '6'; break;
528- case 0x1D: out = '7'; break;
529- case 0x1E: out = '8'; break;
530- case 0x1F: out = '9'; break;
531-
532- case 0x20: out = 'A'; break;
533- case 0x21: out = 'B'; break;
534- case 0x22: out = 'C'; break;
535- case 0x23: out = 'D'; break;
536- case 0x24: out = 'E'; break;
537- case 0x25: out = 'F'; break;
538- case 0x26: out = 'G'; break;
539- case 0x27: out = 'H'; break;
540- case 0x28: out = 'I'; break;
541- case 0x29: out = 'J'; break;
542- case 0x2A: out = 'K'; break;
543- case 0x2B: out = 'L'; break;
544- case 0x2C: out = 'M'; break;
545- case 0x2D: out = 'N'; break;
546- case 0x2E: out = 'O'; break;
547- case 0x2F: out = 'P'; break;
548-
549- case 0x30: out = 'Q'; break;
550- case 0x31: out = 'R'; break;
551- case 0x32: out = 'S'; break;
552- case 0x33: out = 'T'; break;
553- case 0x34: out = 'U'; break;
554- case 0x35: out = 'V'; break;
555- case 0x36: out = 'W'; break;
556- case 0x37: out = 'X'; break;
557- case 0x38: out = 'Y'; break;
558- case 0x39: out = 'Z'; break;
559- case 0x3A: out = VK_OEM_2; break;
560- case 0x3B: out = VK_OEM_1; break;
561- case 0x3C: out = VK_OEM_PLUS; break;
562- case 0x3D: out = VK_OEM_MINUS; break;
563- case 0x3E: out = VK_OEM_3; break;
564- case 0x3F: out = VK_OEM_4; break;
565-
566- case 0x40: out = VK_OEM_6; break;
567- case 0x41: out = VK_OEM_102; break;
568- case 0x42: out = VK_OEM_5; break;
569- case 0x43: out = VK_OEM_COMMA; break;
570- case 0x44: out = VK_OEM_PERIOD; break;
571- case 0x45: out = VK_OEM_7; break;
572- case 0x46: out = VK_MULTIPLY ; break;
573- case 0x47: out = VK_DIVIDE; break;
574- case 0x48: out = VK_ADD; break;
575- case 0x49: out = VK_SUBTRACT; break;
576- case 0x4A: out = VK_DECIMAL; break;
577-
578- default : out = 0;
579- }
580720 #endif
581721
582722 return out;
@@ -589,7 +729,10 @@
589729 //! @return 成功:true 失敗:false 
590730 bool GetDoubleKeyCode(int id, int *CodeL, int *CodeR)
591731 {
592-#ifdef INPUT_DIRECTINPUT
732+#if INPUT_INTERFACE != 2
733+ //未使用引数対策
734+ UNREFERENCED_PARAMETER(id);
735+#else
593736 if( id == 0 ){
594737 *CodeL = DIK_LSHIFT;
595738 *CodeR = DIK_RSHIFT;
@@ -600,9 +743,6 @@
600743 *CodeR = DIK_RCONTROL;
601744 return true;
602745 }
603-#else
604- //未使用引数対策
605- UNREFERENCED_PARAMETER(id);
606746 #endif
607747
608748 //エラー
@@ -615,10 +755,10 @@
615755 //! @return キーコード
616756 int GetEscKeycode()
617757 {
618-#ifdef INPUT_DIRECTINPUT
758+#if INPUT_INTERFACE != 2
759+ return VK_ESCAPE;
760+#else
619761 return DIK_ESCAPE;
620-#else
621- return VK_ESCAPE;
622762 #endif
623763 }
624764
@@ -626,10 +766,10 @@
626766 //! @return キーコード
627767 int GetHomeKeycode()
628768 {
629-#ifdef INPUT_DIRECTINPUT
769+#if INPUT_INTERFACE != 2
770+ return VK_HOME;
771+#else
630772 return DIK_HOME;
631-#else
632- return VK_HOME;
633773 #endif
634774 }
635775
@@ -640,8 +780,25 @@
640780 {
641781 int out = 0;
642782
643-#ifdef INPUT_DIRECTINPUT
783+#if INPUT_INTERFACE != 2
644784 switch(key){
785+ case 1: out = VK_F1; break;
786+ case 2: out = VK_F2; break;
787+ case 3: out = VK_F3; break;
788+ case 4: out = VK_F4; break;
789+ case 5: out = VK_F5; break;
790+ case 6: out = VK_F6; break;
791+ case 7: out = VK_F7; break;
792+ case 8: out = VK_F8; break;
793+ case 9: out = VK_F9; break;
794+ case 10: out = VK_F10; break;
795+ case 11: out = VK_F11; break;
796+ case 12: out = VK_F12; break;
797+
798+ default : out = 0;
799+ }
800+#else
801+ switch(key){
645802 case 1: out = DIK_F1; break;
646803 case 2: out = DIK_F2; break;
647804 case 3: out = DIK_F3; break;
@@ -657,23 +814,6 @@
657814
658815 default : out = 0;
659816 }
660-#else
661- switch(key){
662- case 1: out = VK_F1; break;
663- case 2: out = VK_F2; break;
664- case 3: out = VK_F3; break;
665- case 4: out = VK_F4; break;
666- case 5: out = VK_F5; break;
667- case 6: out = VK_F6; break;
668- case 7: out = VK_F7; break;
669- case 8: out = VK_F8; break;
670- case 9: out = VK_F9; break;
671- case 10: out = VK_F10; break;
672- case 11: out = VK_F11; break;
673- case 12: out = VK_F12; break;
674-
675- default : out = 0;
676- }
677817 #endif
678818
679819 return out;
--- trunk/input.h (revision 256)
+++ trunk/input.h (revision 257)
@@ -39,14 +39,23 @@
3939
4040 #include <windows.h>
4141
42-//#define INPUT_DIRECTINPUT //!< @brief 入力を取得するインターフェースの選択 @details 定数宣言有効:DirectInput 定数宣言無効(コメント化):WinAPI
42+#define INPUT_INTERFACE 0 //!< @brief 入力を取得するインターフェースの選択 @details WindowsInput:0 RawInput:1 DirectInput:2
4343
44-#ifdef INPUT_DIRECTINPUT
44+#if INPUT_INTERFACE == 0
45+ #define INPUT_CORE "WindowsInput" //!< バージョン表示用情報
46+#elif INPUT_INTERFACE == 1
47+ #include <commctrl.h>
48+ #pragma comment (lib, "comctl32.lib")
49+
50+ #define INPUT_CORE "RawInput" //!< バージョン表示用情報
51+#elif INPUT_INTERFACE == 2
4552 #define DIRECTINPUT_VERSION 0x0800 //!< 警告「DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800」を防止
4653 #include <dinput.h>
4754
4855 #pragma comment(lib, "dinput8.lib")
4956 #pragma comment(lib, "dxguid.lib")
57+
58+ #define INPUT_CORE "DirectInput" //!< バージョン表示用情報
5059 #endif
5160
5261 //! @brief 入力デバイスを管理するクラス
@@ -54,23 +63,35 @@
5463 class InputControl
5564 {
5665 HWND hWnd; //!< ウィンドウハンドル
57-#ifdef INPUT_DIRECTINPUT
66+#if INPUT_INTERFACE == 2
5867 LPDIRECTINPUT8 pDI; //!< DIRECTINPUT8のポインタ
5968 LPDIRECTINPUTDEVICE8 pDIDevice; //!< DIRECTINPUTDEVICE8のポインタ・キーボード用
6069 LPDIRECTINPUTDEVICE8 pMouse; //!< DIRECTINPUTDEVICE8のポインタ・マウス用
6170 #else
62- bool InitFlag; //!< 初期化フラグ
71+ bool InitFlag; //!< 初期化フラグ
6372 #endif
6473 char keys[256]; //!< キー情報を格納する配列
6574 char keys_lt[256]; //!< (前回の)キー情報を格納する配列
66- int mx; //!< マウスのX座標
67- int my; //!< マウスのY座標
68- POINT point_lt; //!< (前回の)マウス座標
69- bool mbl; //!< マウスの左ボタン
70- bool mbr; //!< マウスの右ボタン
71- bool mbl_lt; //!< (前回の)マウスの左ボタン
72- bool mbr_lt; //!< (前回の)マウスの右ボタン
75+ int mx; //!< マウスのX座標
76+ int my; //!< マウスのY座標
77+#if INPUT_INTERFACE == 0
78+ POINT point_lt; //!< (前回の)マウス座標
79+#endif
80+ bool mbl; //!< マウスの左ボタン
81+ bool mbr; //!< マウスの右ボタン
82+ bool mbl_lt; //!< (前回の)マウスの左ボタン
83+ bool mbr_lt; //!< (前回の)マウスの右ボタン
84+#if INPUT_INTERFACE == 1
85+ char keys_proc[256]; //!< キー情報を格納する配列(プロシージャ)
86+ int mx_proc; //!< マウスのX座標(プロシージャ)
87+ int my_proc; //!< マウスのY座標(プロシージャ)
88+ bool mbl_proc; //!< マウスの左ボタン(プロシージャ)
89+ bool mbr_proc; //!< マウスの右ボタン(プロシージャ)
7390
91+ static LRESULT CALLBACK SubClassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData);
92+ void GetRowInput(WPARAM wParam, LPARAM lParam);
93+#endif
94+
7495 public:
7596 InputControl();
7697 ~InputControl();