我發現了很多關於使用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