MFC学习笔记之:Windows如何区分鼠标双击和两次单击
来源:互联网 发布:淘宝卖家中心没有了 编辑:程序博客网 时间:2024/04/29 08:23
转载至http://m.blog.csdn.net/blog/a408789699/5635131
MFC学习笔记之:Windows如何区分鼠标双击和两次单击
在Windows平台上,鼠标左键的按下、松开、快速的两次点击会产生WM_LBUTTONDOWN、WM_LBUTTONUP和WM_LBUTTONDBLCLK消息,但是Windows根据什么来区分连续的两次鼠标按键操作,是两次独立的单击,还是一次双击呢?最近在解决一个问题时,通过使用Spy++和查阅MSDN,弄清楚了这个问题。简单总结如下:
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捕获后续的鼠标消息,转发到别的窗口,导致原窗口不能识别双击,而这个双击可能正是期望的。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cnike/archive/2009/11/25/4870064.aspx
- MFC学习笔记之:Windows如何区分鼠标双击和两次单击
- MFC学习笔记之:Windows如何区分鼠标双击和两次单击
- Windows/MFC 如何区分鼠标双击和两次单击
- Windows如何区分鼠标双击和两次单击
- Windows如何区分鼠标双击和两次单击
- Windows如何区分鼠标双击和两次单击
- js区分鼠标单击和双击事件
- windows环境下如何区分单击和双击
- 如何区分按键单击和双击
- 如何区分单击和双击事件
- C# 中如何区分鼠标的单击或双击事件
- vc++鼠标双击和单击的区分实现
- jquery 区分鼠标单击双击事件插件
- C#窗体鼠标事件区分单击双击
- qt 实现、区分鼠标单击,双击事件
- win32中如何区别“鼠标单击”和 “鼠标双击”
- win32中如何区别“鼠标单击”和 “鼠标双击”
- 鼠标单击和双击处理
- 网易有道校招二面
- Hibernate5创建工厂回话类SessionFactory
- 小技巧1-Mac OS 苹果操作系统下显示隐藏文件或者关闭显示隐藏文件。
- MIT6.828 Lab4 PartA
- FW-切图
- MFC学习笔记之:Windows如何区分鼠标双击和两次单击
- OC基础 -- 局部变量,全局变量,成员变量 的区别
- HDU 1166 敌兵布阵(区间求和+单点更新)
- 83Remove Duplicates from Sorted List
- iOS9以来,提交应用到AppStore审核遇到的坑
- SQL的作用
- JavaScript简介
- iOS9使用提示框的正确实现方式
- Objective-C 之 消息机制 (runtime)