捕捉a~z字母键0~9数字键按下的事件是否要一大堆if(nChar=='a'|nChar=='b'………………)语句?有现成的或简化的函数、语句可以使用吗?

解决方案 »

  1.   

    在PreTranslateWindow函数中捕获WM_KEYDOWN消息,判断wParam,可以用Switch语句。
      

  2.   

    if(( nChar>='a'&&nChar<='z')||(nChar>='0'&&nChar<='9'))
    ........
      

  3.   

    可以用
    case:a
    case:b




      

  4.   

    狂晕啊……怎么都是回答?那不如用我的if(nChar==VK_A|nChar==VK_B………………)!?
      

  5.   

    int ParseCode(CString  strCode)
    {
    int ReVal = -1 ;
    int nLength = strCode.GetLength() ;
    if (nLength == 1)
    {
    char c = strCode.GetAt(0);
    if(c >= 97 && c <= 122)
    ReVal = c - 32 ;
    else if( c>= 49 && c <= 59)
    ReVal = c + 48 ;
    }
    else if(strCode == "Esc")
    {
    ReVal = 27 ;
    }
    else if(strCode == "F1")
    {
    ReVal = 112;
    }
    else if(strCode == "F2")
    {
    ReVal = 113;
    }
    else if(strCode == "F3")
    {
    ReVal = 114;
    }
    else if(strCode == "F4")
    {
    ReVal = 115;
    }
    else if(strCode == "F5")
    {
    ReVal = 116;
    }
    else if(strCode == "F6")
    {
    ReVal = 117;
    }
    else if(strCode == "F7")
    {
    ReVal = 118;
    }
    else if(strCode == "F8")
    {
    ReVal = 119;
    }
    else if(strCode == "F9")
    {
    ReVal = 120;
    }
    else if(strCode == "F10")
    {
    ReVal = 121;
    }
    else if(strCode == "F11")
    {
    ReVal = 122;
    }
    else if(strCode == "F12")
    {
    ReVal = 123;
    }
    else if(strCode == "`")
    {
    ReVal = 192 ;
    }
    else if(strCode == "Tab")
    {
    ReVal = 9 ;
    }
    else if(strCode == "Caps Lock")
    {
    ReVal = 20 ;
    }
    else if(strCode == "-")
    {
    ReVal = 189 ;
    }
    else if(strCode == "=")
    {
    ReVal = 116 ;
    }
    else if(strCode == "\\")
    {
    ReVal = 220 ;
    }
    else if(strCode == "Back Space")
    {
    ReVal = 8 ;
    }
    else if(strCode == "Enter")
    {
    ReVal = 13 ;
    }
    else if(strCode == "[")
    {
    ReVal = 219 ;
    }
    else if(strCode == "]")
    {
    ReVal = 221 ;
    }
    else if(strCode == ";")
    {
    ReVal = 186 ;
    }
    else if(strCode == "'")
    {
    ReVal = 222 ;
    }
    else if(strCode == ",")
    {
    ReVal = 188 ;
    }
    else if(strCode == ".")
    {
    ReVal = 190 ;
    }
    else if(strCode == "/")
    {
    ReVal = 191 ;
    }
    else if(strCode == "WinKey")
    {
    ReVal = 91 ;
    }
    else if(strCode == "Insert")
    {
    ReVal = 45 ;
    }
    else if(strCode == "Delete")
    {
    ReVal = 46 ;
    }
    else if(strCode == "Home")
    {
    ReVal = 36 ;
    }
    else if(strCode == "End")
    {
    ReVal = 35 ;
    }
    else if(strCode == "Page Up")
    {
    ReVal = 33 ;
    }
    else if(strCode == "Page Down")
    {
    ReVal = 34 ;
    }
    else if(strCode == "方向上")
    {
    ReVal = 38 ;
    }
    else if(strCode == "方向下")
    {
    ReVal = 40 ;
    }
    else if(strCode == "方向左")
    {
    ReVal = 37 ;
    }
    else if(strCode == "方向右")
    {
    ReVal = 39 ;
    }
    else if(strCode == "Print Screen")
    {
    ReVal = 44 ;
    }
    else if(strCode == "Scroll Lock")
    {
    ReVal =  145;
    }
    else if(strCode == "Pause Break")
    {
    ReVal = 19 ;
    } return ReVal ;
    }
      

  6.   

    应该是用范围判断。你看看 《MFCwindows程序设计》第三章讲的比较清楚了。
      

  7.   

    哈哈,的确应该是范围!我忘了ASCII是有规律的!
    字母和数字键编码是连续的!
    关键是ASCII是有规律的!——可惜没有人提醒稍后再结贴!多谢各位!