Прошло некоторое время с тех пор, как я использовал Glut для обработки ввода с клавиатуры, но мне кажется, что функция обратного вызова клавиатуры когда-то предоставляла неизмененный параметр Key - возможно, я неправильно помню.
Другими словами, нажатие «r» возвращает символ «r» в нижнем регистре, а нажатие SHIFT + «r» по-прежнему возвращает «r» в нижнем регистре, а не «R» в верхнем регистре. Сейчас это не так (возможно, никогда не было), поскольку использование клавиши-модификатора (SHIFT, CONTROL, ALT) фактически изменяет клавишу, отправляемую в функцию обратного вызова. Я пытался найти способ получить необработанное, немодифицированное значение, но с тех пор безуспешно.
Есть ли способ получить доступ к неизмененному значению клавиатуры из функции обратного вызова, или мне нужно будет найти способ отменить модификацию вручную, чтобы получить правильное значение ключа?
glutKeyboardFunc(keyDown);
...
void Game::keyDown(unsigned char key, int mouseX, int mouseY)
{
switch (key)
{
case 'r':
{
cout<<"Called when 'r' is pressed"<<endl;
cout<<"Is NOT called when SHIFT is the modifier"<<endl;
break;
}
case 'R':
{
cout<<"Called ONLY when 'r' is pressed with SHIFT"<<endl;
cout<<"Is NOT called when 'r' is pressed on its own"<<endl;
break;
}
case 18:
{
cout<<"Called ONLY when 'r' is pressed with CONTROL"<<endl;
cout<<"Is NOT called when 'r' is pressed on its own"<<endl;
break;
}
}
}
Любая помощь или совет будут очень признательны.