为什么鼠标单击变双击了(鼠标单击偶尔变双击了)
对于这个问题,我还是建议你先看看MSDN技术文档中关于鼠标点击方面的内容,因为这些内容是我们开展研究的起点。我也假定你基本了解鼠标的单击转换为双击的基本工作原理。在阅读了相关的MSDN文档之后,让我们来看看文档中的设计以及它是如何影响你自己的用户界面设计的。
首先,有些开发者设计鼠标双击动作来执行不同于单鼠标的独立任务。他们想知道在处理鼠标双击消息时忽略WM_LBUTTONDOWN是否安全。
第一次按下鼠标键,窗口管理器不知道下一次会不会有第二次点击。(有时候用户自己可能也不知道。)所以它会发出WM_LBUTTONDOWN消息,稍后等待更多消息。
现在假设你是程序员,你还是想继续采用让双击操作独立于点击操作的设计方案。你会怎么做?一种可能的方法是在接收WM_LBUTTONDOWN消息时不做任何事情,除了设置一个计时器在GetDoubleClickTime()毫秒内触发。如果在此时间内收到WM _ LBUTTONDBLCLK消息,则认为发生了双击动作。如果不是,那么一定是点击,可以执行点击操作(虽然稍微延迟)。
如果不设计双击事件处理,那么这种基于等待的技术方案也是必须的,但是第二次点击和第一次点击一起会造成麻烦。为什么这是必要的?因为很多用户在只需要点击的时候双击。下面是一些你可以看到“延迟操作以避免第二次点击”的例子:
为任务栏通知图标显示的上下文菜单。如果第一次点击时上下文菜单立即出现,第二次点击会关闭上下文菜单,使用户困惑。“我点了一下,出了点事,然后就消失了。”(用户不会说“我双击了”;他们只是说他们合得来。双击是他们唯一知道怎么做的事情,所以他们就叫它“点击”。比如你只有一辆车,那你就不会说“今天我开我的蓝色车”。)
如果浏览器处于一次点击模式,它将等待查看是否有第二次点击,如果有,它将忽略它。否则,当人们双击时,他们将启动程序的两个副本。另外,如果你禁止第二次点击但是不等待,那么他们启动的程序就会卡在explorer窗口后面,因为用户在启动程序后点击了explorer。
XP风格的开始按钮忽略第二次点击。否则,当人们双击开始按钮时,第一次点击将打开开始菜单,第二次点击将关闭它!(这有时被称为“去抖”。)
接下来,让我们看看一个关于延迟鼠标点击的实现代码。
请注意,由于我们正在处理鼠标双击事件,这里我们需要打开CS_DBLCLKS属性。wc.style = CS _ DBLCLKS
运行此程序时,单击并双击客户区。请注意,在双击超时之前,程序不会对单击做出响应,因为它正在等待看您是否要继续第二次单击(所以双击而不是单击)。
稍后我们将讨论两次以上的鼠标点击。
毕竟操作系统不是神仙。它需要尽一切可能去理解用户的点击行为。有时候,这太难了。
最后,Raymond Chen的“旧的新事物”是我最喜欢的博客之一。里面包含了很多关于Windows的小知识,对于广大Windows平台开发人员来说确实很有帮助。这篇文章来自:Windows将单击转换为双击的逻辑结果
我最近写了点东西。如你所知,Topomel Box是一款便携应用,主要针对经常使用电脑的朋友。提供各种小功能,提高办公效率,同时操作尽量简单方便。我想:你值得拥有。
如发现本站有涉嫌抄袭侵权/违法违规等内容,请<举报!一经查实,本站将立刻删除。