处理SDL和C中的关键事件

我正在将程序从GLUT迁移到SDL.在我当前的程序中,按a键会产生不同的响应,然后按A键.这在GLUT中非常简单,因为键盘函数回调在按下的键的ASCII值中传递.

void keyPressedFn(unsigned char key, int x, int y){
    switch(key){
    case 'a':
    // do work for a
    break;
    case 'A':
    // do work for A
    break;
    }
}

我正在努力在SDL中复制类似的功能,因为按下a键会产生相同的响应,无论是否按下SHIFT或CAPS LOCK.

有没有一种简单的方法在SDL中复制上述功能?

编辑:在上面的例子中我只展示了如何处理一个键,但实际上,我将有一个大约15个键的列表,如果按下shift键,我想要以不同的方式响应.

解决方法:

检查keydown事件时出现的键盘修饰符.例如:

while(SDL_PollEvent(&event))
{
  switch(event.type)
  {
  case SDL_KEYDOWN:
    if(event.key.keysym.sym == SDLK_a)
    {
      if(event.key.keysym.mod & KMOD_SHIFT)
      {
        // Handle 'A'
      }
      else
      {
        // Handle 'a'
      }
    }
    break;

  ...

  }
}
上一篇:粗略阅读haribote键盘管理程序 keyboard.c


下一篇:[QT] #1 Qt 的基本介绍与 MFC