当窗口的客户区内发生鼠标事件时,窗口会收到一个客户区鼠标消息。当用户在客户区域内移动光标时,系统将WM_MOUSEMOVE消息发布到窗口。当用户在客户端区域内按下或释放鼠标按钮时,它会发布以下消息之一。
信息 | 含义 |
WM_LBUTTONDBLCLK | 鼠标左键双击。 |
WM_LBUTTONDOWN | 按下鼠标左键。 |
WM_LBUTTONUP | 鼠标左键已被释放。 |
WM_MBUTTONDBLCLK | 鼠标中键被双击。 |
WM_MBUTTONDOWN | 鼠标中键被按下。 |
WM_MBUTTONUP | 中间的鼠标按钮被释放。 |
WM_RBUTTONDBLCLK | 鼠标右键双击。 |
WM_RBUTTONDOWN | 按下鼠标右键。 |
WM_RBUTTONUP | 鼠标右键已被释放。 |
消息参数
客户区鼠标消息的【lParam的】参数指示光标热点的位置。低位字表示热点的x坐标,高位字表示y坐标。坐标在【客户端坐标】中给出。在客户端坐标系中,屏幕上的所有点都相对于客户区域左上角的坐标(0,0)给出。
【wParam中】参数包含指示其他鼠标按钮的状态的标志,以及鼠标事件时的CTRL和SHIFT键。当鼠标消息处理取决于另一个鼠标按钮或CTRL或SHIFT键的状态时,您可以检查这些标志。【lParam的】参数可以是以下值的组合。
值 | 含义 |
MK_CONTROL | CTRL键已关闭。 |
MK_LBUTTON | 鼠标左键已关闭。 |
MK_MBUTTON | 中间的鼠标按钮已关闭。 |
MK_RBUTTON | 鼠标右键已关闭。 |
MK_SHIFT | SHIFT键已关闭。 |
双击消息
当用户连续两次点击鼠标按钮时,系统会生成双击消息。当用户单击按钮时,系统将以光标热点为中心建立一个矩形。它也标志着点击发生的时间。当用户第二次点击相同的按钮时,系统确定热点是否仍在矩形内,并计算自第一次点击以来经过的时间。如果热点仍在矩形内,而经过的时间不超过双击超时值,系统将生成双击消息。
应用程序可以分别使用GetDoubleClickTime和SetDoubleClickTime功能获取并设置双击超时值。或者,应用程序可以使用带有SystemParametersInfo功能的SPI_SETDOUBLECLICKTIME标志来设置双击超时值。它还可以通过将SPI_SETDOUBLECLKWIDTH和SPI_SETDOUBLECLKHEIGHT标志传递给SystemParametersInfo来设置Windows用于检测双击的矩形的大小。但请注意,设置双击超时值和矩形影响所有应用程序。
默认情况下,应用程序定义的窗口不会收到双击消息。由于生成双击消息所涉及的系统开销,这些消息仅针对属于具有CS_DBLCLKS类样式的类的窗口生成。注册窗口类时,您的应用程序必须设置此样式。有关窗口类的更多信息,请参阅窗口类.
双击消息始终是四消息系列中的第三条消息。前两个消息是按下按钮,并按下按钮,首次点击生成的消息。第二次点击生成双击消息,然后再生成另一个按钮向上消息。例如,双击鼠标左键将生成以下消息序列:
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
WM_LBUTTONUP
因为窗口总是在接收到双击消息之前收到按钮消息,所以应用程序通常使用双击消息来扩展在按钮消息期间开始的任务。例如,当用户单击Windows画笔的调色板中的颜色时,画笔会在调色板旁边显示所选颜色。当用户双击一个颜色时,画笔会显示颜色并打开“编辑颜色”对话框。