我已经通过win api创建了一个小窗口。这个窗口是另一个线程窗口的子窗口。
我希望允许用户通过使用前置右键移动鼠标来移动窗口。当我以正常速度移动鼠标时,我的窗口移动没有问题。但当我快速移动时,一些非常奇怪的消息被窗口收到了。例如,
P WM_MOUSEMOVE fwKeys:MK_BUTTON xPos: -32703 yPos:9
如您所见,xPos下降到-32000。我快速移动鼠标后几乎立刻就会发生这种情况。我不知道Windows如何向我发送这样的消息。
为什么要发送消息以及如何修复它?
我正在使用SetCaption函数,因此即使鼠标停留在外面,我的窗口也会收到消息。
UPD。解决了。问题出在我固有的数学上。从lParam获得高低和低调是不恰当的。
答案 0 :(得分:0)
我在实现拖动支持时遇到了同样的问题,在按下左键的同时用鼠标在屏幕中间快速创建小圆圈,生成一些超出范围的位置(如-32000或-64000,尽管正确处理lParam坐标转换)。这对我来说看起来像个错误,所以我通过将x
和y
剪切为最大值的当前屏幕大小(以像素为单位)并将负值降低到负屏幕大小框来解决这个问题。
这是一个代码提取,以便更好地理解(用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
]
...
]
这解决了我。