本帖最后由 ancientcc 于 2017-9-29 20:27 编辑
注 1:按下一个按键时系统会触发两个消息,一个DOWN一个UP,具体到Windows是WM_KEYDOWN、WM_KEYUP。通常情况下WM_KEYDOWN、WM_KEYUP是成对出现的,但有时会出现同一个键多个WM_KEYDOWN,这时第二后或之后的WM_KEYDOWN中的repeat就会被置为1。对于如何判断repeat是什么值,有些系统有API支持,像Window上的lParam的bit30,但SDL判断repeat没使用系统API,而是借用SDL_Keyboard::keystate字段。以下是大概逻辑。 按键按下时(state = SDL_PRESSED)
scancode和mod关系。scancode来自系统API,mod则根据scancode和当前控制键状态计算出的一个值。scancode、mod使用时候。
3:oem码如何转换到SDL自定码 说是SDL自定码,但它其实并不是SDL自定义的,它摘自http://www.usb.org/developers/devclass_docs/Hut1_12.pdf。 转换操作就是通过一个数组:windows_scancode_table。组数索引就是oem码,像常见就是ascii,组就是SDL自定义码。 |