Как следить за перемещением курсора на определенное количество пикселей(100)?

Задача: сделать так, чтобы выводился символ, каждый раз, когда курсор перемещается на более чем 100 пикселей. Как это сделать? Попробовал такой вариант:

    PAINTSTRUCT ps;
    HDC hdc;
    POINT lpPointCursor;
    GetCursorPos(&lpPointCursor);
switch (message)
    {
    case WM_MOUSEMOVE:
        POINT lpPointMove;
        lpPointMove.x = LOWORD(lParam);
        lpPointMove.y = HIWORD(lParam);
        if (abs(lpPointCursor.x - lpPointMove.x) >= 100 || abs(lpPointCursor.y - lpPointMove.y) >= 100) {
            hdc = GetDC(hWnd);
            TextOut(hdc, lpPointMove.x, lpPointMove.y, "a", 1);
        }
        break;
}

Однако он не работает.


Ответы (2 шт):

Автор решения: Zhihar

вам надо запоминать старое положение курсора где-то выше функции с обработчиками событий ну или использовать статические данные

    POINT lpPointMove;
    static POINT lpOldPointMove = {0, 0};

    lpPointMove.x = LOWORD(lParam);
    lpPointMove.y = HIWORD(lParam);
    if (abs(lpOldPointMove.x - lpPointMove.x) >= 100 || abs(lpOldPointMove.y - lpPointMove.y) >= 100) {
        hdc = GetDC(hWnd);
        TextOut(hdc, lpPointMove.x, lpPointMove.y, "a", 1);
    }

    lpOldPointMove = lpPointMove;

    break;

P.S.

кстати если вам надо расстояние все таки от некоторой точки, то не стоит измерять только по оси x и по оси y, вам нужно именно расстояние от точки до точки, т.е.

sqrt((x1 - x2) * (x1 - x2) + (y1 - y1) * (y1 - y2)) < 100

ну или чтобы не тратить время на корень и не терять точности просто работать с квадратами

(x1 - x2) * (x1 - x2) + (y1 - y1) * (y1 - y2) < 100 * 100
→ Ссылка
Автор решения: vladiolus3

@Zhihar У меня lpOldPointMove в коде это:
POINT lpPointCursor;
GetCursorPos(&lpPointCursor);
Однако я еще вынес определение lpPointMove за пределы кейса, но это не помогает. Сейчас код выглядит примерно так:

lpPointMove.x = LOWORD(lParam);
lpPointMove.y = HIWORD(lParam);
if (pow((lpPointCursor.x - lpPointMove.x), 2) + pow((lpPointCursor.y - lpPointMove.y), 2) > 100 * 100) { 
hdc = GetDC(hWnd); 
TextOut(hdc, lpPointMove.x, lpPointMove.y, "a", 1);
}
lpPointCursor = lpPointMove;
break;
→ Ссылка