【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);

原创粉丝点击