我发现了很多关于使用GLUT来检测是否使用GLUT_ACTIVE_CTRL宏按下Ctrl键的信息。显然,这个宏只适用于键盘或鼠标回调函数。我需要知道Ctrl键是否在我的主循环中的某个点被按下,但GLUT_ACTIVE_CTRL在此上下文中似乎不起作用。GLUT键和CTRL键上的按键
那么,有没有一种方法可以检测到键盘上的按键事件和键盘按键事件?在不依赖于平台的GLUT-ish方式下,按键(没有键入任何其他键)?
编辑:当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");
}
,它总是打印 “Control键了。”不管我是否按下Ctrl键。
对于使用典型方法(glutKeyboardFunc(callback))的GLUT,这将不起作用,因为键盘回调未针对修饰键启动。 – jcb 2010-08-26 19:37:07
至少,它们不会在默认设置下被解雇。 – jcb 2010-08-26 19:37:48