人们会问的另一个问题是,“如何实现三次或更多鼠标点击?”如果你已经阅读了上一篇关于双击的文章,并且理解了所使用的算法,那么自然可以将其扩展到三次点击。您需要做的第一件事是将dblclks样式从类中删除,因为我们希望手动管理鼠标单击。
接下来,您需要重新实现windows窗口管理器使用的相同算法,并实现三次鼠标单击,而不是双击。让我们尝试将以下代码添加到示例程序中。
(请注意,我们的示例程序在开始时没有使用cs_dblclks样式,因此不需要删除它)
我们的想法很简单:当鼠标点击发生时,我们检查它是否在“双击区域”和双击时间范围内。如果没有,我们重置鼠标点击次数。
(请注意,sm_cxdoubleclk和sm_cybooleCLK值是整个矩形的宽度,因此当我们展开矩形时,我们将其切成两半,以便矩形向任意方向延伸。是的,这意味着如果双击宽度为奇数,像素将丢失,但windows会小心地将该值设置为偶数。)
接下来,我们记录当前点击的坐标和时间,以便与下一次点击进行比较。
最后,我们通过在标题栏中放置连续的点击编号来响应点击。
这段代码有一些微妙之处。首先,请注意,G_u将cclicks设置为零会强制将下一次单击视为系列中的第一次单击,因为无论是否满足其他条件,单击计数都会增加到1。
接下来,请注意,我们测试点击是否在双击时间内发生的方法对计时器刻度的翻转不敏感。如果我们写这样的代码:
然后,我们将无法正确检测计时器刻度翻转附近的多次点击。(请仔细理解本段内容,以确保理解。)
第三,请注意,当窗口获得或失去激活时,我们会重置点击次数。这样,如果用户单击,然后切换到别处,然后切换回原来的位置,然后再次单击,则不会被视为双击。如果用户在两者之间单击鼠标右键,我们也会这样做。(你可能会注意到,很少有程序如此微妙。)
练习:假设你的程序只处理三次鼠标点击,当鼠标像窗口管理器一样双击时,它怎么能停止?
总结双击太累了。不要打三次?
最后的陈雷蒙的《The Old New Thing》这是我最喜欢的博客之一。有很多关于windows的小知识,这对大多数windows平台开发人员非常有用。
本文来自:《Implementing higher-order clicks》
正如你所知,topomelbox是一款绿色软件,主要面向经常使用电脑的朋友。提供各种小功能,提高办公效率,操作尽可能简单方便。
我认为:这是你应得的。
最新评论