对于DirectInput,以这种方式来处理用户输入的字符,是否太过低效?
//... switch (g_stInputInfo.KeyValue) { case DIK_GRAVE: UpdateText(DIK_GRAVE); break; case DIK_NUMPAD0: case DIK_0: UpdateText(DIK_NUMPAD0); break; case DIK_NUMPAD1: case DIK_1: UpdateText(DIK_NUMPAD1); break; case DIK_NUMPAD2: case DIK_2: UpdateText(DIK_NUMPAD2); break; case DIK_NUMPAD3: case DIK_3: UpdateText(DIK_NUMPAD3); break; case DIK_NUMPAD4: case DIK_4: UpdateText(DIK_NUMPAD4); break; case DIK_NUMPAD5: case DIK_5: UpdateText(DIK_NUMPAD5); break; case DIK_NUMPAD6: case DIK_6: UpdateText(DIK_NUMPAD6); break; case DIK_NUMPAD7: case DIK_7: UpdateText(DIK_NUMPAD7); break; case DIK_NUMPAD8: case DIK_8: UpdateText(DIK_NUMPAD8); break; case DIK_NUMPAD9: case DIK_9: UpdateText(DIK_NUMPAD9); break; case DIK_MINUS: UpdateText(DIK_MINUS); break; case DIK_EQUALS: UpdateText(DIK_EQUALS); break; case DIK_Q: UpdateText(DIK_Q); break; case DIK_W: UpdateText(DIK_W); break; case DIK_E: UpdateText(DIK_E); break; case DIK_R: UpdateText(DIK_R); break; case DIK_T: UpdateText(DIK_T); break; case DIK_Y: UpdateText(DIK_Y); break; case DIK_U: UpdateText(DIK_U); break; case DIK_I: UpdateText(DIK_I); break; case DIK_O: UpdateText(DIK_O); break; case DIK_P: UpdateText(DIK_P); break; case DIK_LBRACKET: UpdateText(DIK_LBRACKET); break; case DIK_RBRACKET: UpdateText(DIK_RBRACKET); break; case DIK_A: UpdateText(DIK_A); break; case DIK_S: UpdateText(DIK_S); break; case DIK_D: UpdateText(DIK_D); break; case DIK_F: UpdateText(DIK_F); break; case DIK_G: UpdateText(DIK_G); break; case DIK_H: UpdateText(DIK_H); break; case DIK_J: UpdateText(DIK_J); break; case DIK_K: UpdateText(DIK_K); break; case DIK_L: UpdateText(DIK_L); break; case DIK_SEMICOLON: UpdateText(DIK_SEMICOLON); break; case DIK_APOSTROPHE:UpdateText(DIK_APOSTROPHE); break; case DIK_Z: UpdateText(DIK_Z); break; case DIK_X: UpdateText(DIK_X); break; case DIK_C: UpdateText(DIK_C); break; case DIK_V: UpdateText(DIK_V); break; case DIK_B: UpdateText(DIK_B); break; case DIK_N: UpdateText(DIK_N); break; case DIK_M: UpdateText(DIK_M); break; case DIK_COMMA: UpdateText(DIK_COMMA); break; case DIK_PERIOD: UpdateText(DIK_PERIOD); break; case DIK_SLASH: UpdateText(DIK_SLASH); break; case DIK_MULTIPLY: UpdateText(DIK_MULTIPLY); break; case DIK_ADD: UpdateText(DIK_ADD); break; case DIK_SUBTRACT: UpdateText(DIK_SUBTRACT); break; case DIK_DECIMAL: UpdateText(DIK_DECIMAL); break; }//...void CEditCTL::UpdateText(DWORD scancode){ int ascii = ScanToASCII(scancode); // 0x14:VK_CAPITAL if ((GetKeyState(0x14)&0x1) || g_Input.GetKeyPtr()->IsKeyDown(DIK_LSHIFT) || g_Input.GetKeyPtr()->IsKeyDown(DIK_RSHIFT)) { m_szCaption += char(ascii); } else { m_szCaption += char(ascii+32); } UpdateCursor();}// 将DirectInput扫描码转换成ASCII码int CEditCTL::ScanToASCII(DWORD scancode){ HKL layout = GetKeyboardLayout(0); unsigned char State[256]; if (GetKeyboardState(State) == FALSE) return 0; UINT vk = MapVirtualKeyEx(scancode, 1, layout); return vk;}
我总感觉有些突兀。
[解决办法]
虽然没有用过dxut
但是看起来应该不是这样判断输入的,太麻烦了啊
[解决办法]
这个……一个if就行啦,干嘛写那么多case
[解决办法]