上一篇中,我们介绍了键盘消息,接下来,我们来了解一下鼠标消息。
在上一篇中,我们知道Windows只把键盘消息发送给拥有输入焦点的窗口。鼠标消息与此不同,只要鼠标跨越窗口或者在某窗口中按下鼠标键,那么窗口过程就会受到鼠标消息,而不管该窗口是否活动或者是否拥有输入焦点。同键盘消息类似,鼠标消息也简单的可以分为客户区鼠标消息和非客户区鼠标消息。
客户区鼠标消息
当鼠标通过窗口的客户区时,窗口过程受到WM_MOUSEMOVE消息。需要注意的是,Windows并不为鼠标的每个可能的像素位置都产生一条WM_MOUSEMOVE消息。我们的程序接收到WM_MOUSEMOVE消息的次数依赖于鼠标硬件以及窗口过程处理鼠标移动的速度。当在窗口的客户区中按下或者释放一个鼠标键时,窗口过程会接收到下列消息。
鼠标左键: WM_LBUTTONDOWN(按下) WM_LBUTTONUP(抬起) WM_LBUTTONDBLCLK(双击)
鼠标中键: WM_MBUTTONDOWN WM_MBUTTONUP WM_MBUTTONDBLCLK
鼠标右键: WM_RBTUUONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK
对这些消息,它们的wParam的值表示鼠标键及Shift和Ctrl键的状态。我们可以通过位屏蔽来测试wParam。其中位标志如下:
MK_LBUTTON 按下左键
MK_MBUTTON 按下中键
MK_RBUTTON