C SDL物理密钥代码和SDL虚拟密钥代码之间的区别是什么?

C SDL物理密钥代码和SDL虚拟密钥代码之间的区别是什么?,c,keyboard,sdl-2,scancodes,C,Keyboard,Sdl 2,Scancodes,结构SDL\u keycom具有SDL\u Scancode和SDL\u Keycode成员。他们之间有什么区别?文档并没有真正为我澄清这一点。我两次都试过了,他们似乎做了同样的事情。参见。扫描码表示按键的物理位置,模仿标准QWERTY键盘,而按键码是通过按键获得的字符 在AZERTY键盘上,按A将发出'Q'扫描码和'A'键码。通常,s是键盘(硬件)向操作系统发出的真实值,而键码是操作系统/库根据所选布局将其映射到的值。布局决定扫描代码到某个虚拟密钥代码之间的映射。它是操作系统设置的一部分。这里

结构
SDL\u keycom
具有
SDL\u Scancode
SDL\u Keycode
成员。他们之间有什么区别?文档并没有真正为我澄清这一点。我两次都试过了,他们似乎做了同样的事情。

参见。扫描码表示按键的物理位置,模仿标准QWERTY键盘,而按键码是通过按键获得的字符

在AZERTY键盘上,按A将发出
'Q'
扫描码和
'A'
键码。

通常,s是键盘(硬件)向操作系统发出的真实值,而键码是操作系统/库根据所选布局将其映射到的值。布局决定扫描代码到某个虚拟密钥代码之间的映射。它是操作系统设置的一部分。这里所说的布局,我指的是功能布局;还有机械和视觉布局。阅读更多关于维基百科的信息。扫描代码和虚拟密钥的概念在MSDN中有说明

然而,SDL使用扫描码来表示不同的含义:美国QWERTY键盘中键的扫描码,其位置与所讨论的位置相同。这是一种与设备无关的方式,根据钥匙的位置来表示钥匙。这是埋在一个不寻常的位置在:

扫描码应与布局无关。可以将其视为“用户按下Q键就像在美国QWERTY键盘上一样”,而不管这实际上是欧洲键盘还是Dvorak键盘或其他什么。扫描码始终处于同一关键位置

键码意味着与布局相关。可以将其视为“用户按下特定键盘上标有‘Q’的键。”

例如,如果您按下美国QWERTY键盘CAPS LOCK右侧的两个键,它将报告SDL_scancode_s的扫描码和SDLK_s的键码。Dvorak键盘上的同一个键将报告SDL_scancode_s的扫描码和SDLK_O的键码

在上面的引文中,“布局”指的是功能布局。本手册关于键盘的部分在此问题上有点简短:

SDL_扫描码值用于表示键盘键在键盘上的物理位置

SDL_键码值映射到键盘的当前布局,并与SDL_扫描码关联

使用哪一种取决于应用程序:扫描码适用于控件依赖于布局的情况(例如,“WASD”键作为左手箭头键),而键码更适合于控件依赖于字符的情况(例如库存的“I”键)


在上述报价中,按布局,手册指的是机械/物理布局。因此,对于控制字符,例如,使用扫描码更好,而对于接收用户名keycode更好。

我说的是传统的扫描码,SDL似乎使用了该术语来表示其他含义。所以是的,你的答案一直都是正确的。我已经确定了我的答案来反映这一点。感谢你耐心地提出问题,为我指明正确的方向,让我明白这一点。@legends2k我以为我是被纠正的人,哈哈!谢谢你的确认:)