如何区分单击事件和双击事件中的 WM_LBUTTONUP 消息

问题描述

我想在单击事件中收到WM_LBUTTONUP消息时做一些事情,但是双击事件中的WM_LBUTTONUP消息不应该做这些事情。如何在处理消息的函数 OnLButtonUp() 中忽略它?

解决方法

您的计算机没有透视超能力,因此无法可靠地预测任何观察到的 WM_LBUTTONUP 是否跟随任何 WM_LBUTTONDBLCLK 消息。

可以做的是在 WM_LBUTTONDOWN 消息处理程序中启动一个超时时间为 GetDoubleClickTime 的计时器,并构建一个复杂的状态机,在 WM_TIMER 上的状态之间移动{1}}、WM_LBUTTONUPWM_LBUTTONDBLCLK 消息。

这是可行的,但比您预期的要复杂得多。此外,它必然会在用户释放鼠标左键和他们打算触发开始的操作之间引入延迟。

应该做的是解决你的用户体验问题。如果您使单击操作与双击操作无关,那么这就是需要解决的错误。 Logical consequences of the way Windows converts single-clicks into double-clicks 深入探讨了更多细节,并得出了相同的结论:不要,就是不要这样做。