Windows根据两个条件进行区分:
([1)双击时间间隔
这很容易想到。更准确地说,两次单击将生成四次鼠标单击消息。如果第三条消息(第二次按下)和第二条消息(由第一次反弹触发的WM_LBUTTONUP)之间的间隔短于“指定值”,则将第三条消息处理为WM_LBUTTONDBLCLK消息;第四条消息仍然是WM_LBUTTONUP。
在Windows XP SP2上,此指定的时间间隔默认为0. 5秒,对于其他操作系统,该时间间隔可能相同。可以通过调用:: GetDoubleClickTime获得此值。
可以设置此值。设置此值的方法有两种::: SetDoubleClickTime调用,或以SPI_SETDOUBLECLICKTIME作为第一个参数的调用:: SystemParametersInfo。设置的结果还会影响系统中的其他应用程序。
([2)两次鼠标单击之间的间隔距离
在第一次单击时,Windows将检测到一个以命中点为中心的矩形区域。如果第二次单击不在此区域之内,则第三条消息将不会计为WM_LBUTTONDBLCLK消息。
在Windows XP SP2上,此矩形区域的默认大小默认为4pt×4pt。可以通过以SM_CXDOUBLECLK或SM_CYDOUBLECLK作为参数调用:: GetSystemMetrics来获取。
此值也可以设置。设置方法是使用SPI_SETDOUBLECLKWIDTH或SPI_SETDOUBLECLKHEIGHT作为第一个参数调用:: SystemParametersInfo。设置的结果还会影响系统中的其他应用程序。
因此,连续两次按下并弹跳鼠标左键:
如果不满足以上两个条件,则生成的消息为:
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDOWN
WM_LBUTTONUP
如果满足以上两个条件,则生成的消息为:
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
WM_LBUTTONUP
以上结论还暗示了两个要点:
(1)无论是连续两次单击还是两次单击,一、的第二和第四条消息都不会受到影响。在收到双击消息之前,应用程序始终会收到WM_LBUTTONDOWN和首先是WM_LBUTTONUP消息,然后是WM_LBUTTONUP消息,应用程序应适当地处理各种消息;
(2)第二条消息和第三条消息是密钥,必须连续发送到同一窗口过程中才能进行处理。开发中的常见错误是:处理第一条消息WM_LBUTTONDOWN或在WM_LBUTTONUP中,随后的鼠标消息将通过SetCapture捕获并转发到其他窗口,从而导致原始窗口无法识别双击,而这种双击可能是预期的。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-373412-1.html
努力
让她永远站最边边上