键盘:
1、键盘上每一个有意义的键都对应着一个唯一的标识值,称为扫描码。
2、WINDOWS 系统定义的与设备无关的键的标识,称为虚拟码。虚拟码是;一种与设备无关的键盘编码,它的值存放在键盘消息的wParam参数中,最常用的虚拟码;已经在windows.h中定义;
3、键盘消息可以分为两类,即按键消息和字符消息。按键消息又可分为两类:系统按键消息和非系统按键消息。
(系统消息对应与使用Alt键与相关输入键的组合产生的消息,一般由Windows系统内部直接处理应用程序一般不处理,如果应用程序处理了这些系统键消息,就要调用DefWindowPro()函数以便不影响Windows对他们的处理)
按键消息的两个变量wParam和lParam中包含了许多的重要信息,其中wParam参数包含了识别按下的键的虚键码。
在WinMain函数的消息循环中包含了TranslateMessage函数,它的主要功能是把按键消息转化为字符消息,但只有当键盘驱动程序把键盘字符映射成ASCII码后才能产生WM_CHAR消息。
例:
常用的虚拟码:VK_ENTER Enter键 VK_SHIFT Shift键 等;
按键消息:WM_KEYDOWN 非系统 按下 WM_KEYUP 非系统 松开
WM_SYSKEYDOWN 系统 按下 WM_SYSKEYUP 系统 松开
字符消息:WM_CHAR 非系统 字符 WM_DEADCHAR 非系统 死字符
WM_SYSCHAR 系统 字符 WM_SYSDEADCHAR 系统 死字符
鼠标:
1、可以通过LoadCursor函数来加载光标资源
重点:能接收鼠标事件的窗口并不一定要求是活动窗口或者是具有输入焦点的窗口;
在鼠标消息中,参lParam包含了鼠标光标位置,lParam字的低位包含了鼠标光标位置的x坐标值,lParam 字的高位包含了鼠标光标位置的y值。参数wParam内包含了一个指示各种虚键状态的值。
2、对鼠标消息的处理,一般分为两种,一种是要对Shift和Ctrl键进行监测,另一种则不监测;
例如:
1: case WM_LBUTTONDOWN:
if((wParm&MK_CONTROL)&&(wParam & MK_SHIFT)) //Shift 和Ctrl都按下
break;
2: case WM_LBUTTONDOWN:
...
break;
3、若要使窗口函数能接收鼠标双击产生的消息,则在注册窗口类时必须注明该窗口类具有CS_DBLCLKS属性
定义方式如下:
wndclass.style=CS_HREDRAW| CS_VREDRAW|CS_DBLCLKS;
4、对于非用户区鼠标消息,将送往函数DefWindowProc进行处理。
5、调用SetCapture()函数即可实现对鼠标的捕捉,如SetCapture(hWnd);就可以向句柄为hWnd的窗口发送所有的鼠标消息。当调用完后,通过ReleaseCapture()函数释放鼠标,以便其他窗口可以正常地接收鼠标信息。