Virtual Key
Nov 21, 2012 at 8:28am UTC
.....................................................................................................................
Hey guys hi good morning now today I've finished the function Virtual Key to char data conversion.
In short, I need your suggestions to improve this function.
Now here's the code VkKey -> unsigned char().
This function translates a virtual key (from keyboard) to a regular char value. Eg -> VK_A will generate "a" (Capslock is off)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
inline unsigned char GetNumberSymbol(unsigned char num)
{
switch (num){
case 0 : return ')' ; break ;
case 1 : return '!' ; break ;
case 2 : return '@' ; break ;
case 3 : return '#' ; break ;
case 4 : return '$' ; break ;
case 5 : return '%' ; break ;
case 6 : return '^' ; break ;
case 7 : return '&' ; break ;
case 8 : return '*' ; break ;
case 9 : return '(' ; break ;
}
return '0' + num;
}
unsigned char vkToChar(unsigned char vKey, bool bCapsLock = false )
{
//////////////////////////////////////////////////////////////////////////////////////
//Numbers, letters
if (vKey < 0x30)return 0;
if (vKey > 0x40 && vKey <= 0x5A)
{
if (!bCapsLock)
return 'a' + vKey - 0x41;
return 'a' + vKey - 0x41 - 32;
}
if (vKey <= 0x39)
{
if (!bCapsLock)return vKey;
return GetNumberSymbol(vKey - '0' );}
if (vKey > 0x60 && vKey <= 0x69)
{
if (!bCapsLock) return '0' + vKey - 0x60;
return GetNumberSymbol(vKey - 0x60);
}
//////////////////////////////////////////////////////////////////////////////////////
//Symbols
if (vKey >= 186){
vKey-= 186;
if (vKey <= 6)
{
if (!bCapsLock)
switch (vKey){
case 0 : return ';' ; break ;
case 1 : return '=' ; break ;
case 2 : return ',' ; break ;
case 3 : return '-' ; break ;
case 4 : return '.' ; break ;
case 5 : return '/' ; break ;
case 6 : return '`' ; break ;
}
switch (vKey){
case 0 : return ':' ; break ;
case 1 : return '+' ; break ;
case 2 : return '<' ; break ;
case 3 : return '_' ; break ;
case 4 : return '>' ; break ;
case 5 : return '?' ; break ;
case 6 : return '~' ; break ;
}
}
//////////////////////////////////////////////////////////////////////////////////////
//Other symbols
if (vKey > 32 && vKey < 37){
if (!bCapsLock){
if (vKey == 33)return '[' ;else
if (vKey == 35)return ']' ;else
if (vKey == 36)return 39;}
else {
if (vKey == 33)return '{' ;else
if (vKey == 35)return '}' ;else
if (vKey == 36)return '"' ;}
}}
//////////////////////////////////////////////////////////////////////////////////////
return 0;
}
Any suggestion?
(Any help would be greatly appreciated.)
Last edited on Nov 21, 2012 at 8:41am UTC
Nov 21, 2012 at 11:19am UTC
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646306
Nov 21, 2012 at 11:35am UTC
@Jackson Marie - I suggest that you write functions that only have one exit point. Writing functions that have exit points i.e. return ... ; all over the place is a bad habit and isn't easy to debug, as is having seperate lines of code on the same line.
Topic archived. No new replies allowed.