Поиск неизмененного ввода с клавиатуры из функции обратного вызова glutKeyboardFunc

Прошло много времени с тех пор, как я использовал 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;
}
}
}

Любая помощь или совет будет принята с благодарностью.

0

Решение

Вы ищете эту функцию:

int glutGetModifiers(void);

Вы можете присвоить результат целому числу и проверить его следующим образом:

GLUT_ACTIVE_SHIFT
GLUT_ACTIVE_CTRL
GLUT_ACTIVE_ALT

Маленький пример

int modifier = glutGetModifiers();
if (modifier == GLUT_ACTIVE_CTRL)
//code
else
//code
}

Также обратите внимание, что эта функция должна вызываться только внутри функций, обрабатывающих события ввода с клавиатуры или мыши.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]