Win32 Api WM_MOUSEMOVE快速移动鼠标

时间:2011-10-27 02:50:19

标签: winapi mousemove

我已经通过win api创建了一个小窗口。这个窗口是另一个线程窗口的子窗口。

我希望允许用户通过使用前置右键移动鼠标来移动窗口。当我以正常速度移动鼠标时,我的窗口移动没有问题。但当我快速移动时,一些非常奇怪的消息被窗口收到了。例如,

P WM_MOUSEMOVE fwKeys:MK_BUTTON xPos: -32703 yPos:9

如您所见,xPos下降到-32000。我快速移动鼠标后几乎立刻就会发生这种情况。我不知道Windows如何向我发送这样的消息。

为什么要发送消息以及如何修复它?

我正在使用SetCaption函数,因此即使鼠标停留在外面,我的窗口也会收到消息。

UPD。解决了。问题出在我固有的数学上。从lParam获得高低和低调是不恰当的。

1 个答案:

答案 0 :(得分:0)

我在实现拖动支持时遇到了同样的问题,在按下左键的同时用鼠标在屏幕中间快速创建小圆圈,生成一些超出范围的位置(如-32000或-64000,尽管正确处理lParam坐标转换)。这对我来说看起来像个错误,所以我通过将xy剪切为最大值的当前屏幕大小(以像素为单位)并将负值降低到负屏幕大小框来解决这个问题。

这是一个代码提取,以便更好地理解(用Red/System编写):

WM_MOUSEMOVE [
    lParam: msg/lParam
    x: GET_X_LPARAM(lParam)
    y: GET_Y_LPARAM(lParam)
    if any [
        x < (0 - screen-size-x)
        y < (0 - screen-size-y)
        x > screen-size-x
        y > screen-size-y
    ][
        return 0        ;-- ignore this event
    ]
    ...
]

这解决了我。