一.键盘输入处理
前面说过,windows程序是由消息驱动的,我们对程序的操作也可以被包装成一个消息,投递到程序的消息队列中,窗口过程函数通过对这个消息处理,达到响应输入的目的。
常见的键盘消息有以下几种:
WM_KEYDOWN //键盘按下
WM_KEYUP //键盘松开
WM_SYSKEYDOWN //系统键按下
WM_SYSKEYUP //系统键松开
WM_CHAR //字符消息
在这里,KEYDOWN和KEYUP都是成对发生的,比如要判断一个瞬时输入,那么用KEYDOWN和KEYUP是一样的,如果要判断连续性的按下,那么就需要同时使用KEYDOWN和KEYUP了,但是还有个更加简单的方法,GetMesageTime可以获取消息的相对时间,详情请查阅MSDN
但是,窗口过程函数接受的只是WM_XXX消息,仅仅判断到了键盘有输入,怎么确定是哪个键被按下了呢?
前面说过,窗口过程函数有接受两个参数,wParam和lParam,消息的结构体里面也有这两个参数。按键的信息就存储在这两个参数里面:
wParam参数存储的就是按键的虚拟键码,lParam存储的是按键的相关信息。在windows中,虚拟键码对应键盘上的一个实际按键,”虚拟“也是windows操作系统常用的东东,比如虚拟存储,虚拟设备,这样有什么好处呢?一方面,就是我们在编程的时候,不需要考虑底层的一些硬件信息,只需要调用windows为我们写好的api就可以操作底层的硬件,大大的方便了我们这些程序猿编写程序,另一方面,我们所编写的程序对操作系统而言是“不可信的”,操作系统需要将我们和底层硬件隔离,以免破坏计算机,假如我们这些菜鸟都可以直接操