Win32 Api WM_MOUSEMOVE быстрое перемещение мыши - PullRequest
2 голосов
/ 27 октября 2011

Я создал маленькое окно win api. Это окно является дочерним по отношению к окну другого потока.

Я хочу разрешить пользователю перемещать мое окно, перемещая мышь с помощью правой кнопки. Когда я двигаю мышь с нормальной скоростью, мое окно движется без проблем. Но когда я двигаюсь очень быстро, некоторые очень странные сообщения получаются из окна. Например,

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

Как видите, xPos падает до -32000. Это происходит почти сразу после того, как я быстро двигаю мышью. Я понятия не имею, как Windows может отправить мне такое сообщение.

Почему это сообщение можно отправить и как это исправить?

Я использую функцию SetCaption, поэтому мое окно получает сообщения, даже если мышь остается снаружи.

Upd. Решаемые. Проблема была в моей врожденной математике. Принимать привет и низкое слово от Ларама было неправильно.

1 Ответ

0 голосов
/ 26 октября 2015

У меня была такая же проблема при реализации поддержки перетаскивания, когда быстрые маленькие круги в центре экрана с помощью мыши при нажатой левой кнопке генерировали некоторые позиции вне диапазона (например, -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
    ]
    ...
]

Это решило это для меня.

...