从glutKeyboardFunc回调函数中寻找未修改的键盘输入

时间:2013-08-28 19:15:33

标签: c++ input callback glut modifier

自从我使用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;
        }
    }
}

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

您正在寻找此功能:

int glutGetModifiers(void);

您可以将结果分配给整数,并使用以下内容进行检查:

GLUT_ACTIVE_SHIFT
GLUT_ACTIVE_CTRL
GLUT_ACTIVE_ALT

一个小例子

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

另请注意,只应在处理键盘或鼠标输入事件的函数内调用此函数。