问题及解决:
我在调试一个程序的按键响应事件时,用到了OnKeyDown函数。打好断点调试,遇到了两个问题:一是按字母和数字键时毫无反应;二是按一些符号键时,尽管按键不同,nChar的值都为229。
解决方法:只需改为(微软自带的)英文输入法之后再按键即可。
函数解释:
OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
是 MFC提供的一个消息处理函数,用于响应键盘按下事件。以下是参数解释:
UINT nChar:
表示被按下的键的虚拟键码(Virtual-Key Code)。例如,字母'A'的虚拟键码是0x41,回车键的虚拟键码是VK_RETURN。
虚拟键码是用于标识各种键盘按键的常量值,定义在Windows头文件中,例如winuser.h。
UINT nRepCnt:
表示键被按住时自动重复的次数。如果用户一直按住某个键不放,这个值将大于1。通常,初次按键时这个值为1,当键继续保持按住状态时,该值会增加。
UINT nFlags:
包含有关于按键事件的附加信息的标志位。该参数可以包含重复计数、扫描码、扩展键标志等信息,此处略。
其他补充:
nChar为229是因为按下的这个键的输入先被输入法处理了,之后会统一返回229
即使引用了winuser.h,也仍需自己定义字母和数字的虚拟键码,如:#define VK_A 0x41