如何区分单击事件和双击事件中的WM_LBUTTONUP消息
How to distinguish the WM_LBUTTONUP message in a single-click event and a double-click event
我想在单击事件中收到WM_LBUTTONUP消息时做一些事情,但是双击事件中的WM_LBUTTONUP消息不应该做这些事情。如何在处理消息的函数 OnLButtonUp() 中忽略它?
您的计算机没有千里眼的超能力,因此无法可靠地预测任何观察到的 WM_LBUTTONUP
之后是否有任何 WM_LBUTTONDBLCLK
消息。
您可以做的是在您的WM_LBUTTONDOWN
消息处理程序中启动一个超时为GetDoubleClickTime
的计时器,并建立一个复杂的状态机在 WM_TIMER
、WM_LBUTTONUP
和 WM_LBUTTONDBLCLK
消息的状态之间移动。
这是可行的,但比您预期的要复杂得多。另外,它必然会在用户释放鼠标左键和他们打算触发开始的动作之间引入延迟。
您应该做的是解决您的用户体验问题。如果您使单击操作与双击操作无关,那么这就是需要解决的错误。 Logical consequences of the way Windows converts single-clicks into double-clicks 详细得多,并得出相同的结论:不要,就是不要这样做。
我想在单击事件中收到WM_LBUTTONUP消息时做一些事情,但是双击事件中的WM_LBUTTONUP消息不应该做这些事情。如何在处理消息的函数 OnLButtonUp() 中忽略它?
您的计算机没有千里眼的超能力,因此无法可靠地预测任何观察到的 WM_LBUTTONUP
之后是否有任何 WM_LBUTTONDBLCLK
消息。
您可以做的是在您的WM_LBUTTONDOWN
消息处理程序中启动一个超时为GetDoubleClickTime
的计时器,并建立一个复杂的状态机在 WM_TIMER
、WM_LBUTTONUP
和 WM_LBUTTONDBLCLK
消息的状态之间移动。
这是可行的,但比您预期的要复杂得多。另外,它必然会在用户释放鼠标左键和他们打算触发开始的动作之间引入延迟。
您应该做的是解决您的用户体验问题。如果您使单击操作与双击操作无关,那么这就是需要解决的错误。 Logical consequences of the way Windows converts single-clicks into double-clicks 详细得多,并得出相同的结论:不要,就是不要这样做。