Как следить за перемещением курсора на определенное количество пикселей(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 шт):
вам надо запоминать старое положение курсора где-то выше функции с обработчиками событий ну или использовать статические данные
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
@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;