检查鼠标左键是否按下?

6

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

我尝试了Mouse.IsDragging,但没有结果。

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


2个回答

21
有一个Windows API函数GetAsyncKeyState(),尽管它的名称是用于获取键盘按键状态,但也可以用来获取鼠标按钮的状态。链接的文档直接包含了你的问题的答案:

GetAsyncKeyState函数可与鼠标按钮一起使用。然而,它检查的是物理鼠标按钮的状态,而不是映射到物理按钮上的逻辑鼠标按钮的状态。例如,调用GetAsyncKeyState(VK_LBUTTON)总是返回左物理鼠标按钮的状态,而不管它是否映射到左或右逻辑鼠标按钮。可以通过调用GetSystemMetrics(SM_SWAPBUTTON)来确定物理鼠标按钮到逻辑鼠标按钮的当前映射方式,如果鼠标按钮已经交换,则返回TRUE

short类型的结果,要检查最高位,只需测试值是否为负数即可。

1
非常好。虽然您提供了关于检查最高有效位的解决方案,但您能描述一下获取它的正式方式吗? - Vassilis
1
@VassilisGr:抱歉,我不太理解这个请求。让类型强制转换由编译器处理可能是最好的选择(即正式的方式),因为它使您远离32位和64位编译等问题。还是指您想知道如何测试结果中是否设置了单个位?只需使用类似于(result and $8000)<> 0的东西即可。 - mghie
1
正在寻找 (result and $8000) <> 0。谢谢! - Vassilis

0
OnMouseMove(UINT nFlags, CPoint point)
{
  m_LButtonPressed=nFlags & MK_LBUTTON;
  CWnd::OnMouseMove(nFlags, point);
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接