Windows应用程序中几种特殊鼠标事件的识别
VC MFC 编程经验与技巧
Windows应用程序中几种特殊鼠标事件的识别
鼠标作为计算机输入设备随着Windows的流行而逐渐成为计算机的标准配置。在
Windows中鼠标的操作可以产生二十多个消息,主要分为客户区鼠标消息和非客户区
鼠标消息两大类,包括鼠标的移动,左中右键的按下、释放、双击等。事实上,实
际的应用程序中往往会用到一些特殊的鼠标事件,如鼠标三击、左右鼠标同时按下
、鼠标单击双击三击的独立识别或依次处理等。下面结合笔者编程的体会来谈一下
Windows中这几种特殊的鼠标事件的识别方法。
一、独立处理单击、双击和三击
我们先看一下Windows对鼠标的响应。对左键而言,如果鼠标按下,则产生 WM_LBUTTONDOWN消息。接着,鼠标释放产生WM_LBUTTONUP消息;但如果鼠标双击,
则Windows并不仅仅只产生WM_LBUTTONDBLCLK 消息,而是先产生
WM_LBUTTONDOWN消
息,然后产生WM_LBUTTONDBLCLK消息,其中还有WM_LBUTTONUP等消息,这里暂不讨
论。对于鼠标的三击,Windows没有提供独立的消息,但我们不妨认为三击是在 WM_LBUTTONDBLCLK消息之后再发一个WM_LBUTTONDOWN消息。所以,在应用程序编程
时若要窗口分别独立地响应鼠标的单击、双击、三击消息,只有用户自己动手去处
理。例如,Winows95中的文件夹改名就是一个例子,用鼠标单击一个已经加亮的文
件夹名称时稍作停留便可改名,如果双击则可打开该文件。这时,就必须单独处理
鼠标的单击和双击,否则执行顺序应该是先响应WM_LBUTTONDOWN消息,然后再响应
WM_LBUTTONDBLCLK,即先改名再打开,这是事与愿违的。
为了单独识别这三个鼠标消息,我们不能直接使用WM_LBUTTONDOWN和 WM_LBUTTONDBLCLK消息来判断鼠标的单击和双击。这里,定义三个“伪”消息 WM_MYSNGCLK、WM_MYDBLCLK、WM_MYTHRCLK,用它们分别标识鼠标的单击、双击和三
击事件。由于我们在两次连续的鼠标单击后还不能确定是否有三击,所以再增加一
个 WM_MYDBLCLKT伪消息,在处理该伪消息时再进一步判断双击与三击。我们只处理
WM_LBUTTONDOWN消息,所以注册窗口类时不设置CS_DBLCLKS风格。


