【BCB 原创】深入 分析 C++Builder 6 的鼠标 单击 双击 事件 关键词: 单击 双击 实现机制
来源:互联网 发布:软件外包公司联系 编辑:程序博客网 时间:2024/04/27 23:32
开发桌面鼠标等程序的时候,不可避免的要用到 鼠标的 down up click(单击) doubleClick(双击事件) 的交替使用,使用C++builder开发的程序员也许会遇到很多莫名的错误,觉得不可思议。
同样的,在开发QQ截屏软件的时候我也遇到了,那就是我双击了一个form,引发了双击事件,但是鼠标 的down和up事件又会影响doubleclick事件里的某个全局量,
比如
在down事件里面把一个boolean变量 a置为0;
在up事件里把a置为1;
在doubleclick事件里把a置为1;
我的期待是:双击之后 a=1;
可是不管我怎么修改,最终的a结果还是0;
郁闷了我好一会···
后来我跟踪记录了调用的事件顺序,发现了一个C++Builder的一个bug:
我们知道,一个Click事件的调用顺序是:(对单击的处理顺序各个编译器应该都是一样的)
down事件 click事件 up事件
可想而知,DoubleCilck事件的调用顺序: (DoubleClick事件的实现:两次单击事件在一定间隔内发生,所定义的doubleclick事件为第二次单击产生的事件)
down事件 click事件 up事件 down事件 DoubleClick事件 up事件
确实,大部分编译器VC,VS等都是如此的。
已上是Microsoft公司产品对doubleclick的处理机制;
但是C++builder的处理机制是这样的:
down事件 click事件 up事件 DoubleClick事件 down事件
别担心我写错了,就是这样,它放弃了执行up事件,而且DoubleCilck事件在第二次down之前。
这样我觉得不是BCB开发者想要的意图,因为这样烦化了编程;
对于上面的实现,我们只能外加一个boolean全局变量 IsDoubleClick;在down事件中加上对IsDoubleClick的判断,如果为true,那么a=1;如果为false,那么a=0;(初始化IsDoubleClick为false);
- 【BCB 原创】深入 分析 C++Builder 6 的鼠标 单击 双击 事件 关键词: 单击 双击 实现机制
- qt 实现、区分鼠标单击,双击事件
- javascript 鼠标单击和双击事件并存的实现方法
- unity鼠标单击双击事件
- 鼠标添加单击双击事件
- 鼠标双击变单击
- 鼠标单击和双击中的事件处理
- Android 鼠标事件 (单击,双击,滑动)
- Android 鼠标事件 (单击,双击,滑动)
- jquery 区分鼠标单击双击事件插件
- MFC 鼠标双击响应单击事件
- js区分鼠标单击和双击事件
- android鼠标单击双击事件互不影响
- C#窗体鼠标事件区分单击双击
- js判断鼠标单击或者双击事件
- C# 中如何区分鼠标的单击或双击事件
- js鼠标单击和双击事件冲突问题的解决方法
- js鼠标单击和双击事件冲突问题的解决方法
- sql server 2005 数据类型
- 采集 淘宝产品描述信息
- 英文单词换行 css
- Eclipse快捷键大全
- SyncML同步协议
- 【BCB 原创】深入 分析 C++Builder 6 的鼠标 单击 双击 事件 关键词: 单击 双击 实现机制
- C++中日期函数
- 在JSP中访问Oracle数据库
- Servlets中的监听器和过滤器
- Import marvel compiler to scratchbox
- C语言函数调用约定
- Oracle 10g 默认安装带来的用户名/密码
- 如何在一台服务器上实现多个Web站点
- 在JSP中访问MS SQL Server数据库