检查鼠标按钮是不是关闭?

Posted

技术标签:

【中文标题】检查鼠标按钮是不是关闭?【英文标题】:Check if Mouse LButton is down?检查鼠标按钮是否关闭? 【发布时间】:2009-08-14 03:25:59 【问题描述】:

如何检查鼠标左键当前是否被按下/拖动(我更喜欢第一种可能性)。

我试过 Mouse.IsDraging,但没有结果。

注意:我在我的应用程序中处理鼠标消息,所以如果它是 WM 也没问题,只需分享一种完成我的任务的方法。

【问题讨论】:

Delphi: How can I check if any mouse buttons are pressed - OUTSIDE of a mouse event?的可能重复 【参考方案1】:

有一个 Windows API 函数GetAsyncKeyState(),尽管它的名字也可用于获取鼠标按钮的状态。链接的文档直接包含您问题的答案:

GetAsyncKeyState 函数适用于鼠标按钮。但是,它会检查物理鼠标按钮的状态,而不是物理按钮映射到的逻辑鼠标按钮。例如,调用GetAsyncKeyState(VK_LBUTTON) 始终返回物理鼠标左键的状态,无论它是映射到逻辑鼠标左键还是逻辑鼠标右键。您可以通过调用GetSystemMetrics(SM_SWAPBUTTON) 来确定系统当前物理鼠标按钮到逻辑鼠标按钮的映射,如果鼠标按钮已被交换,则返回TRUE

结果类型为short,检查最高位只测试值是否为负。

【讨论】:

非常好。虽然你给出了关于检查最高位的解决方案,但你能描述一下获取它的正式方式吗? @VassilisGr:抱歉,我不太明白这个要求。将类型强制留给编译器可能是最好的(即正式的?)事情,因为它将您与 32 位与 64 位编译之类的问题隔离开来。还是您的意思是如何测试结果中的单个位是否已设置?只需使用 (result and $8000) <> 0 之类的东西。 正在寻找(result and $8000) <> 0。谢谢!【参考方案2】:
OnMouseMove(UINT nFlags, CPoint point)

  m_LButtonPressed=nFlags & MK_LBUTTON;
  CWnd::OnMouseMove(nFlags, point);
 

【讨论】:

以上是关于检查鼠标按钮是不是关闭?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查鼠标是不是在控件上

检查鼠标按钮是不是按下按钮/图片并每隔几秒钟继续执行一个功能直到按下按钮?

WPF窗体,具体如图:最小化和关闭鼠标滑过显示,但是就不显示内容。偶尔出现,望大神帮忙分析分析。

如何通过拖动鼠标 QT 检查按钮?鼠标移动事件

wpf 一个窗体中点击空白部分关闭另一个窗体

MFC鼠标移动/离开,悬停在按钮上[关闭]