GLUT提供了两个函数用于设置键盘事件的回调函数,一个用于处理普通按键,一个处理特殊功能按键(如箭头、F1~F12)。
先看看处理普通按键的函数:
void glutKeyboardFunc(void (*func) (unsigned char key, int x, int y));
回调函数func的第一个参数是按键的ASCII码,剩下的是按键时候的鼠标坐标。鼠标坐标是相对窗口的左上角的。
示例:
void processNormalKeys(unsigned char key, int x, int y) {
if (key == 27)
exit(0);
}
另一个处理特殊按键的函数是:
void glutSpecialFunc(void (*func) (int key, int x, int y));
回调函数的第一个参数可以是:
key常量 | 描述 |
GLUT_KEY_F1 | F1功能键 |
GLUT_KEY_F2 | F2功能键 |
GLUT_KEY_F3 | F3功能键 |
GLUT_KEY_F4 | F4功能键 |
GLUT_KEY_F5 | F5功能键 |
GLUT_KEY_F6 | F6功能键 |
GLUT_KEY_F7 | F7功能键 |
GLUT_KEY_F8 | F8功能键 |
GLUT_KEY_F9 | F9功能键 |
GLUT_KEY_F10 | F10功能键 |
GLUT_KEY_F11 | F11功能键 |
GLUT_KEY_F12 | F12功能键 |
GLUT_KEY_LEFT | 左方向键 |
GLUT_KEY_UP | 上方向键 |
GLUT_KEY_RIGHT | 右方向键 |
GLUT_KEY_DOWN | 下方向键 |
GLUT_KEY_PAGE_UP | PageUp键 |
GLUT_KEY_PAGE_DOWN | PageDown键 |
GLUT_KEY_HOME | Home键 |
GLUT_KEY_END | End键 |
GLUT_KEY_INSERT | Insert键 |
后两个参数是鼠标的坐标。
除了以上两个函数,还有一个函数用于判断CTRL,ALT和SHIFT键的状态:
int glutGetModifiers(void);
它的返回值是GLUT_ACTIVE_SHIFT、GLUT_ACTIVE_CTRL和GLUT_ACTIVE_ALT的按位或。示例:
mod = glutGetModifiers();
if (mod == (GLUT_ACTIVE_CTRL|GLUT_ACTIVE_ALT)) {
//TODO
}
通常这个函数会在键盘事件的回调函数中被调用。