2011-08-08 49 views
1

所以我有以下的代码,侦听keydown事件,然后只要它接受一个退出:SDL左控制键被释放时keydown事件被触发

int main(int argc, char** argv) { 
    SDL_Init(SDL_INIT_VIDEO); 
    SDL_Surface* screen = SDL_SetVideoMode(640, 480, 32, SDL_DOUBLEBUF); 
    SDL_Event _event; 
    while (1) { 
     while (SDL_PollEvent(&_event)) { 
      if (_event.type == SDL_KEYDOWN) { 
       return 0; 
      } 
     } 
     SDL_GL_SwapBuffers(); 
    } 
} 

当我运行它,我可以按任意箭头键,字母,数字,F1-F12 ...除了左侧控制键外,几乎可以使用任何按键,程序将立即退出。
但是当我按下左控制键,程序不会退出,直到我发布的关键。

虽然示例没有显示它,但在按住左控制按钮时(例如ctrl + s)按下另一个按键会导致丢失控件keydown事件(以及第二个事件“ s'被按下)。

有什么办法可以禁用左控制键这种奇怪的行为?

顺便说一句,这是在Windows上使用mingw。我还没有用任何其他编译器/操作系统测试过这种行为。

+0

您是否试过[SDL_WM_GrabInput](http://sdl.beuc.net/sdl.wiki/SDL_WM_GrabInput)? –

+0

@Banthar我试过了,但它所做的只是捕捉鼠标。 – Ponkadoodle

回答

1

所以事实证明,我忘记把sdl.dll放到与我的可执行文件相同的目录中。它正在加载一些其他的sdl.dll,碰巧在路径环境变量上。我将与我编译版本(1.2.14)匹配的sdl.dll放到我的应用程序目录中,现在它工作正常。