【问题标题】:How to determine which way the mouse is being dragged (Win32, C++)如何确定鼠标的拖动方式(Win32、C++)
【发布时间】:2012-09-30 01:53:38
【问题描述】:

我目前正在做一个项目,该项目需要我知道鼠标何时被拖动到左侧或右侧。

我想用这些信息做什么,是在 3d 空间(使用 OpenGL/Win32)中向左或向右拖动一个对象,具体取决于鼠标的拖动方式。

问题是,我不知道如何确定鼠标的拖动方式。

我尝试找到之前的x坐标,并从当前x坐标中减去它,但是我不知道如何确定之前的x坐标!

有人可以帮帮我吗?

(P.S. 我已经知道当前 x 鼠标位置是用 LOWORD(lParam) 找到的,但我不知道如何确定之前的 x 鼠标位置。感谢您的时间。 )

【问题讨论】:

  • 您可以将当前位置存储在一个变量中,并下次将其用作上一个位置。
  • 我已经尝试过上述方法,但是,我的问题是,当我存储当前位置并根据新的当前位置检查时,它们总是相等(相同)。例如,如果我当前的鼠标位置是 10,并且我再次更改它,我会检查 xprev 和 curx,它们都等于 10。
  • windows 过程中的静态变量可以很好地存储前一个变量。解决方案的核心是使存储前一个 x 位置的变量对函数本身来说是全局的。
  • @JamesDiaz: "当我存储当前位置并根据新的当前位置检查时,它们总是相等" 那么你的代码中有一个错误.也许你应该把代码贴出来让我们看到。

标签: c++ winapi


【解决方案1】:

您可以自己完成,将当前鼠标位置存储为“最后一个”鼠标位置,然后在两次鼠标位置更新后减去。

onMouseMove(mouseX, mouseY):
    if previousX and previousY are set:
        deltaX = previousX - mouseX
        deltaY = previousY - mouseY
        actOnDrag(deltaX, deltaY)

    previousX = mouseX
    previousY = mouseY

您可以将 previousX 和 previousY 设置为某个疯狂的标记值(例如 -1),以确定它们是否曾经被设置过。

【讨论】:

  • 两个问题,我如何确定鼠标何时更新了两次,第二,这个“actOnDrag”是什么我当时完全迷失了。
  • @JamesDiaz:“这个“actOnDrag”是什么,我当时完全迷失了。”这就是你写的函数来做你想做的事想要基于鼠标被拖动的方向。你在说鼠标“更新两次”是什么意思?
  • Ravuya 写道:“然后在两次鼠标位置更新后,减去。”我想知道如何准确确定鼠标位置何时更新了两次。 (这就是我所说的更新两次)..
  • @JamesDiaz:他帖子的最后一行告诉你怎么做。
【解决方案2】:

您可以使用DragDetect 函数。

BOOL DragDetect(HWND  hwnd, POINT pt);

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-dragdetect

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-12
    • 2017-07-29
    • 2013-03-12
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多