Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как считывать события мыши...??? не знаю, а очень надо... 
:(
    Опции темы
Plotter
  Дата 29.10.2002, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.10.2002
Где: Москва

Репутация: нет
Всего: нет



Програмист на Си я еще начинающий, так, что даже таких вещей не знаю...
Нужен маленький фрагмент кода (я так пологаю, что он маленький), который будет обрабатывать события мыши (перемещение+2кнопки)... и все. Я знаю, что это очень легко, но от этого мне не легче...
PM MAIL WWW   Вверх
Baa
Дата 29.10.2002, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Проект какой?
MFC или Win32?


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Baa
Дата 29.10.2002, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Вобщем так или иначе, тебе надо обрабатывать сообщения:
WM_MOUSEMOVE
WM_LBUTTONDOWD
WM_RBUTTONDOWD
и т.д.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Plotter
Дата 29.10.2002, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.10.2002
Где: Москва

Репутация: нет
Всего: нет



Словил... Значит так проект у меня под Вин32, с нажатиями я думаю теперь разберусь, а вот с движением - не уверен.... Значит так... произошло событие... а как мне после этого хотя бы координаты курсора считать или лучше узнать куда она двигалась (вверх,вниз, или еще куда)???
PM MAIL WWW   Вверх
Baa
Дата 29.10.2002, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



WM_MOUSEMOVE  
fwKeys = wParam;        // key flags
xPos = LOWORD(lParam);  // horizontal position of cursor
yPos = HIWORD(lParam);  // vertical position of cursor

Как узнать куда она двигалась? Анализируй последнее и предпоследнее положение мыши, а точнее её координат... если по Х они уменьшались - значит вверх и т.д.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Plotter
Дата 29.10.2002, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.10.2002
Где: Москва

Репутация: нет
Всего: нет



Спасибо, именно этот код мне и был нужен. Премного благодарен... Сутра опробую, сейчас уже не могу - засыпаю... 3-я ночь за Си дает о себе знать...
PM MAIL WWW   Вверх
Plotter
Дата 31.10.2002, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.10.2002
Где: Москва

Репутация: нет
Всего: нет



Так, ладно все получилось... Спасибо. Но теперь у меня возник следующий вопрос: как мне сделать скроллинг, т.е с самим-то скроллингом проблем нет, камера у меня двигается, но мне надо сделать, чтобы она начинала двигаться, только тогда, когда курсор находится очень близко к краю экрана... Алгоритм составить я могу, но вот куда мне этот фрагмент влепить - не знаю. Если я его помещу в WM_MOUSEMOVE, то он у меня будет срабатывать, только когда мышь ДВИГАЕТСЯ около границы, а мне надо проверять ее местоположение, даже, когда она не двигается.
PM MAIL WWW   Вверх
Baa
Дата 31.10.2002, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Засунь проверку в таймер...


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Baa
Дата 31.10.2002, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Хотя, я бы сделал по-другому... двигается мышь или нет, но ведь как-то она попала к границе окна? => она туда придвинулась... ну вот и выстави какой-нить флаг в тру... и пока он тру делай какие-то действия... а если мышь отъехала, то и флаг делай в фолс и тогда действия делатся не будут...


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Plotter
Дата 31.10.2002, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.10.2002
Где: Москва

Репутация: нет
Всего: нет



Ладно, наверное что-нибуть такое попробую. Но тут у меня возник один глупый вопрос (может, конечно, он уже для другой темы,ну да ладно): "А как вообще пользоваться таймером? (в смысле синтаксис и все такое)" Если можно - простейший кусок програмки, где что-то зависит т таймера - я думаю, что разберусь....
PM MAIL WWW   Вверх
Baa
Дата 31.10.2002, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Создай новую тему


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Plotter
  Дата 1.11.2002, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.10.2002
Где: Москва

Репутация: нет
Всего: нет



Ну, ладно, ладно... Этот вопрос я уже в новую тему вывел, но остался еще один... Делаю так как ты посоветовал... создал флаг, и далее ориентируюсь по нему скролить мне или нет... но вот беда: этот кусок кода я засунул в default после проверки всех WM-ов, а он что-то не пашет... такое ощущение, что он туда вообще не попадает... Подскажи может это у меня с головой не все впорядке... Вот та часть которая в default-e:
Код

     default:
      if (FLAG==true)//true, если курсор около края окна
        {
                kk+=dk;  //kk - переменная отвечающая за сдвиг по x
        TURN_H+=dTURN_H;//тоже, но по Y
               Draw(hWnd,CURENT_SCENE,kk,TURN_H);//перерисовка сцены
}
      return DefWindowProc(hWnd, message, wParam, lParam);

У меня тут создается впечатление, что пока события нет он вообще ничего не делает... Или все таки он бегает по какому-нибудь пустому циклу, ожидая сообщения? Например в конце всего WndProc-а стоит return 0L;...он хотя бы туда попадает? Ладно, может я лопухнулся с дефолтом и туда он не идет, но куда я этот фрагмент не ставил, он все равно не выполняется, пока нет никаких событий... Только если мышой возить вблизи границы экрана, то он будет скролить (да и то не в варианте с дефолтом, а если вставить это перед РЕТУРН 0Л), а иначе никак... :thumbs-up
PM MAIL WWW   Вверх
Plotter
Дата 1.11.2002, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.10.2002
Где: Москва

Репутация: нет
Всего: нет



Уточню вопрос... switch(message) ждет пока придет какое-нибудь сообщение или идентифицирует его например как NULL и бросает в default или еще куда???
PM MAIL WWW   Вверх
Plotter
  Дата 2.11.2002, 05:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.10.2002
Где: Москва

Репутация: нет
Всего: нет



:colgate Ладно, с этой проблемой я разобрался...(просто запихнул это на таймер), но все же предыдущий вопрос о том куда отсылает switch(message) мне все еще интересен (вдруг когда либо пригодится)... :)

P.s. кстати, за помощь с таймером огромное тебе спасибо, Ваа...
PM MAIL WWW   Вверх
Baa
Дата 2.11.2002, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Цитата(Plotter @ 01.11.2002, 01:27)
Уточню вопрос... switch(message) ждет пока придет какое-нибудь сообщение или идентифицирует его например как NULL и бросает в default или еще куда???

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


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0674 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.