case WM_MOUSEMOVE:
{
GLfloat MousePosX = (GLfloat)LOWORD(lParam);
// А вот сдесь нужно отследить перемещение мыши по оси Х
return 0;
}
Отслеивание перемещения мыши
Делаю так:
В WndProc
......
Код:
Вопрос собсвенно в том, как узеать, что мышь двинули вправо/влево. Насколько у меня работает соображалка, здесь надо цеплятся за убывание или возростания значения переменной MousePosX, но что-то пока с этим туговато. Никак не могу понять, как рализовать. Простое if(--MousePosX){//какие-то там действия} или f(++MousePosX){//какие-то там действия} несрабатывает. У кого есть идеи/предложения?
Код:
int g_oldCursorX = -1; //изначально = -1
int g_oldCursorY = -1;
...
int currX, currY, deltaX, deltaY;
...
case WM_MOUSEMOVE:
currX = GET_X_LPARAM(lParam);
currY = GET_Y_LPARAM(lParam);
if (g_oldCursorX == -1)
deltaX = 0;
else
deltaX = currX - gOldCursorX;
if (g_oldCursorY == -1)
deltaY = 0;
else
deltaY = currY - gOldCursorY;
// deltaX(Y) < 0 - движение влево(вверх), иначе - вправо(вниз)
// еще что-то делаем
...
// устанавливаем старым координатам новые значения
g_oldCursorX = currX;
g_oldCursorY = currY;
break;
...
int g_oldCursorY = -1;
...
int currX, currY, deltaX, deltaY;
...
case WM_MOUSEMOVE:
currX = GET_X_LPARAM(lParam);
currY = GET_Y_LPARAM(lParam);
if (g_oldCursorX == -1)
deltaX = 0;
else
deltaX = currX - gOldCursorX;
if (g_oldCursorY == -1)
deltaY = 0;
else
deltaY = currY - gOldCursorY;
// deltaX(Y) < 0 - движение влево(вверх), иначе - вправо(вниз)
// еще что-то делаем
...
// устанавливаем старым координатам новые значения
g_oldCursorX = currX;
g_oldCursorY = currY;
break;
...
Цитата:
Originally posted by _const_
WM_MOUSEMOVE приходит только тогда, когда координаты курсора изменились. Поэтому где-нибудь сохраняем координаты, которые имел курсор в последний раз.
WM_MOUSEMOVE приходит только тогда, когда координаты курсора изменились. Поэтому где-нибудь сохраняем координаты, которые имел курсор в последний раз.
Код:
int g_oldCursorX = -1; //изначально = -1
int g_oldCursorY = -1;
...
int currX, currY, deltaX, deltaY;
...
case WM_MOUSEMOVE:
currX = GET_X_LPARAM(lParam);
currY = GET_Y_LPARAM(lParam);
if (g_oldCursorX == -1)
deltaX = 0;
else
deltaX = currX - gOldCursorX;
if (g_oldCursorY == -1)
deltaY = 0;
else
deltaY = currY - gOldCursorY;
// deltaX(Y) < 0 - движение влево(вверх), иначе - вправо(вниз)
// еще что-то делаем
...
// устанавливаем старым координатам новые значения
g_oldCursorX = currX;
g_oldCursorY = currY;
break;
...
int g_oldCursorY = -1;
...
int currX, currY, deltaX, deltaY;
...
case WM_MOUSEMOVE:
currX = GET_X_LPARAM(lParam);
currY = GET_Y_LPARAM(lParam);
if (g_oldCursorX == -1)
deltaX = 0;
else
deltaX = currX - gOldCursorX;
if (g_oldCursorY == -1)
deltaY = 0;
else
deltaY = currY - gOldCursorY;
// deltaX(Y) < 0 - движение влево(вверх), иначе - вправо(вниз)
// еще что-то делаем
...
// устанавливаем старым координатам новые значения
g_oldCursorX = currX;
g_oldCursorY = currY;
break;
...
БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!!
Как всегда, все оказалось проще, чем думал. Тока медленно как то реагирует и странный глюк - мышь неподвижна (колебания Земли не в счет:P), а объект на экране дергается, мож из-за того что мыша подключена через USB и оптическая, но это ничего - попробую на низком уровне.
Еше раз спасибо!