我在OnKeyDown消息里截获的nChar值都是虚键值,我如何把这些值转成字符值呢?有简单的办法吗?

解决方案 »

  1.   

    对于0~9和a~z应该都是对应的ASCII码,可以直接存储了。而对于其它的,可能你要先判断一下才行,比如安下了F1键,你可以需要存储字符串吧“F1”。
      

  2.   

    除了0~9,a~z,其他的都是对应不上字符值的.如果要判断的话,其他的字符太多了,还有Shift,numlock,alt,ctrl的状态会产生不同的值,真的很麻烦,所以才请教大家有没有什么简单的办法?难道只能通过截获OnChar了吗?
      

  3.   

    char ch = 0 ;

    int iShift=GetKeyState(0x10);
    int iCapital=GetKeyState(0x14);
    int iNumLock=GetKeyState(0x90);

    bool bShift=(iShift&0x80000000)==0x80000000;
    bool bCapital=(iCapital&1)==1;
    bool bNumLock=(iNumLock&1)==1;

    if(vKey==32) //TAB
    {
    ch = 32;
    return ch;
    }
    /*
    if(vKey==13) //回车键
    {
    ch = '\n';
    SaveLog(ch);
    }
    */
    if(vKey>=48 && vKey<=57) //数字键0-9
    {
    if(!bShift)
    {
    ch = vKey;
    return ch;

    }
    else
    {
    switch(vKey)
    {
    case 49:
    ch='!';
    break;
    case 50:
    ch='@';
    break;
    case 51:
    ch='#';
    break;
    case 52:
    ch='$';
    break;
    case 53:
    ch='%';
    break;
    case 54:
    ch='^';
    break;
    case 55:
    ch='&';
    break;
    case 56:
    ch='*';
    break;
    case 57:
    ch='(';
    break;
    case 48:
    ch=')';
    break;
    }
    }
    return ch;
    }

    if(vKey>=65 && vKey<=90) //A-Z a-z
    {
    if(!bCapital)
    {
    if(bShift)
    ch=vKey;
    else
    ch=vKey+32;
    }
    else if(bShift)
    ch=vKey+32;
    else
    ch=vKey;
    return ch;
    }

    if(vKey>=96 && vKey<=105) //小键盘0-9
    {
    if(bNumLock)
    {
    ch = vKey-96+48;
    }
    return ch;
    }

    if(vKey==106)
    {
    ch = '*';
    return ch;
    }
    if(vKey==107)
    {
    ch = '+';
    return ch;
    }
    if(vKey==111)
    {
    ch = '/';
    return ch;
    }
    if(vKey==109)
    {
    ch = '-';
    return ch;
    }
    if(vKey==110)
    {
    if(bNumLock)
    {
    ch = '.';
    }
    return ch;
    }

    if(vKey>=186 && vKey<=222) //其它键
    {
    switch(vKey)
    {
    case 186:
    if (!bShift) ch=';' ;
    else ch=':' ;
    break;
    case 187:
    if (!bShift) ch='=' ;
    else ch='+' ;
    break;
    case 188:
    if (!bShift) ch=',' ;
    else ch='<' ;
    break;
    case 189:
    if (!bShift) ch='-' ;
    else ch='_' ;
    break;
    case 190:
    if (!bShift) ch='.' ;
    else ch='>' ;
    break;
    case 191:
    if (!bShift) ch='/' ;
    else ch='?' ;
    break;
    case 192:
    if (!bShift) ch='`' ;
    else ch='~' ;
    break;
    case 219:
    if (!bShift) ch='[';
    else ch='{' ;
    break;
    case 220:
    if (!bShift) ch='\\' ;
    else ch='|' ;
    break;
    case 221:
    if (!bShift) ch=']';
    else ch='}' ;
    break;
    case 222:
    if (!bShift) ch='\'';
    else ch='\"' ;
    break;
    }
    return ch;}