Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отслеивание перемещения мыши

262
07 ноября 2005 года
Iktomy
1.2K / / 11.10.2004
Удалил прошлую запись, ибо бред.
Делаю так:
В WndProc
......
 
Код:
case WM_MOUSEMOVE:
        {
            GLfloat MousePosX = (GLfloat)LOWORD(lParam);
    // А вот сдесь нужно отследить перемещение мыши по оси Х
            return 0;
        }

Вопрос собсвенно в том, как узеать, что мышь двинули вправо/влево. Насколько у меня работает соображалка, здесь надо цеплятся за убывание или возростания значения переменной MousePosX, но что-то пока с этим туговато. Никак не могу понять, как рализовать. Простое if(--MousePosX){//какие-то там действия} или f(++MousePosX){//какие-то там действия} несрабатывает. У кого есть идеи/предложения?
1.8K
07 ноября 2005 года
_const_
229 / / 26.11.2003
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;
...
262
08 ноября 2005 года
Iktomy
1.2K / / 11.10.2004
Цитата:
Originally posted by _const_
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;
...



БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!!
Как всегда, все оказалось проще, чем думал. Тока медленно как то реагирует и странный глюк - мышь неподвижна (колебания Земли не в счет:P), а объект на экране дергается, мож из-за того что мыша подключена через USB и оптическая, но это ничего - попробую на низком уровне.
Еше раз спасибо!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог