您的位置:首页 > 其它

win32(4)--鼠标及键盘消息

2017-05-31 15:24 260 查看
鼠标消息:

鼠标消息是系统队列消息,只要鼠标跨越窗口或者在某窗口中按下鼠标按键,那么窗口消息处理程序就会收到鼠标消息,而不管该窗口是否活动或者是否拥有输入焦点。

客户区的鼠标消息:(就是在窗口的客户区)

鼠标按键消息:鼠标左键、中间键、右键的按下、弹起和双击,共9个消息:

左键:WM_LBUTTONDOWN、WM_LBUTTONUP、WM_LBUTTONDBLCLK;

中间键:WM_RBUTTONDOWN、WM_RBUTTONUP、WM_RBUTTONDBLCLK;

右键:WM_MBUTTONDOWN、WM_MBUTTONUP、WM_MBUTTONDBLCLK;

鼠标移到消息:WM_MOUSEMOVE

鼠标滚轮消息:WM_MOUSEWHEEL(该消息在非客户区同样有)

对于上面的11个消息,其WParam和LParam的含义:

LParam参数存放鼠标的坐标信息:LParam的低2位LOWORD(lParam)是x坐标(列坐标),高2位HIWORD(lParam)是y坐标(行坐标)。这个坐标是窗口的客户区坐标。但是:WM_MOUSEWHEEL消息的坐标是屏幕坐标!

WParam参数存放鼠标按键以及Shift和Ctrl键的状态:也就是在得到上面11个消息的时候,是否同时有其他的鼠标键或者Shift和Ctrl键被按下。(实际上,这个其他鼠标键和CTRL、SHIFT的按键状态在wParam的低字节)(WParam是unsigned int类型,LParam是long类型)

非客户区鼠标消息:(鼠标在标题栏、边框啥的)

非客户区鼠标消息指的是鼠标在窗口的客户区之外但还在窗口内,Windows就给窗口消息处理程序发送一条非客户区鼠标消息。窗口的非客户区包括标题栏、菜单和窗口滚动条、窗口边框等等。

一般情况下,这些消息会传递到DefWindowProc来处理,从而使Windows执行系统功能。

非客户区鼠标消息基本上与客户区鼠标消息相对应。只是多了”NC”两个字母。如左键WM_NCLBUTTONDOWN。

键盘消息:

键盘消息分为系统键消息和非系统键消息。系统键消息是指由Aft键和其他键组合而产生的按键消息。当系统键被按下时产生WM_SYSKEYDOWN消息,当系统键被释放时产生WM_SYSKEYUP消息。 Aft键与其他键形成的组合键通常用于对程序菜单和系统菜单进行选择,或用于在不同的程序之间进行切换。因此,系统键消息应该交由Windows进行处理,用户所编制的程序一般不处理系统键消息,而是将这些消息交由DefWindowProc函数进行处理。如果用户想对系统键消息进行处理,应该在处理完这些消息后,再将其发送给DefWindowProc函数,使得Windows系统能够正常工作。

某些击键消息可以被转换成字符消息,例如字母键、数字键等。而有些键只能产生按键消息而没有字符消息,例如 Shift键、Insert键等。消息循环中的 TranslateMessage函数可以实现从击键消息向字符消息的转化。当GetMessage函数捕获一个WM_SYSKEYDOWN消息或 WM_KEYDOWN消息后,TranslateMessage函数判断产生该消息的键是否能够被转换成字符消息,如果能,就将该消息转换成字符消息(WM_CHAR等),然后Post到消息队列里面。

WParam保存按键的虚拟键码或字符的ASCII码。对于非字符消息,WParam保存按键的虚拟健代码;对于字符消息,WParam保存字符的ASCII码。

LParam保存击键时产生的附加信息,实际上一个32位的LParam变量被分为六部分,记录了以下相关信息:重复次数、OEM扫描码、扩展键标志、关联键标志、前一击键状态和转换状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  win32