【发布时间】:2010-08-26 19:16:38
【问题描述】:
我找到了很多关于使用 GLUT 来检测是否使用 GLUT_ACTIVE_CTRL 宏按下了 Ctrl 键的信息。显然,这个宏只在键盘或鼠标回调函数中有效。我需要知道在我的主循环中的某个点是否按下了 Ctrl 键,但是 GLUT_ACTIVE_CTRL 在这种情况下似乎不起作用。
那么,有没有一种方法可以以独立于平台的 GLUT 方式检测 Ctrl 键上的键向上和向下键事件(无需键入任何其他键)?
编辑:当按下 Ctrl 键时,不会触发键盘回调(至少对于默认设置)。这是基本问题,我只能测试在按下另一个键时是否按下了 Ctrl 键,从而触发键盘回调。
我的设置是这样的:
// ... in main function:
glutKeyboardFunc(keyboard);
//later in the code:
void keyboard(unsigned char key, int _x, int _y)
{
printf("keydown \n");
if (glutGetModifiers() == GLUT_ACTIVE_CTRL) {
printf("control key is pressed.\n");
}
//etc.
当我按下任何普通字符时,“keydown”会打印到标准输出。当我按下 Ctrl 键时,什么也没有发生。如果我按 Ctrl+C,“keydown 控制键被按下”。被打印出来了。
但是,在我的主循环中,我添加了:
if (glutGetModifiers() == GLUT_ACTIVE_CTRL) {
printf("Control key down.\n");
} else {
printf("Control key up.\n");
}
它总是打印“控制键向上”。不管我是否按下 Ctrl 键。
【问题讨论】:
标签: opengl glut keyboard-events