首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

对于DirectInput,以这种方式来处理用户输入的字符,是否太过低效?该怎么处理

2012-04-23 
对于DirectInput,以这种方式来处理用户输入的字符,是否太过低效?C/C++ code//...switch (g_stInputInfo.Ke

对于DirectInput,以这种方式来处理用户输入的字符,是否太过低效?

C/C++ code
//...    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
[解决办法]

探讨
恩对,那现在的问题就是如何把DirectInput的扫描码正确转换成ASCII码值。

[解决办法]
如果你想用dinput作中文输入的话,其难度相当于开发一个中文输入法。
你前面的帖子我不是说了吗,可以在窗口事件回调函数里响应WM_CHAR消息,这个消息是专为用户输入字符所设计的。你自己要多尝试啊

热点排行