Страница 1 из 2
Не получается захватить колесо мышки
Добавлено: 10 ноя 2016, 22:53
Skwoogey
В общем, название двольно полно выражает проблему
вот код
Код: Выделить всё
if(PeekMessage (&msg, MainHandle, 0, 0, PM_REMOVE))
{
if (msg.message == WM_MOUSEWHEEL)
{
cam->Zoom(GET_WHEEL_DELTA_WPARAM(msg.wParam));
}
else
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
мое предположение, что glut запускает окно и рендер-функцию в разных потоках, а МДСН говорит, чтобы PeekMessage работало, они должны быть в одном потоке. Как обойти это дело, я не нашел. Что я делаю не так? Или может есть другой способ захватить колесико?
Re: Не получается захватить колесо мышки
Добавлено: 11 ноя 2016, 09:37
Romeo
У glut свой собственный цикл обработки сообщений, так что мне интересно, где ты пытаешься "крутить" приведённый цикл... Скорее всего цикл вызывается только тогда, когда выполнение доходит до твоего кода (например, во время отрисовки), так что даже если это будет "иногда" работать, получить постоянную реакцию на вращение колёсика ты всё равно не сможешь.
Насколько я понимаю, наиболее правильное решение проблемы - это повесить хук на мышиные сообщения (см.
SetWindowHookEx).
P.S. С glut никогда не работал. Все выводы сделаны на основании пары простеньких статей, которые только что прочёл для того, чтобы ответить тебе.
Re: Не получается захватить колесо мышки
Добавлено: 11 ноя 2016, 16:06
Din666
можно повесить обработку колесика непосредственно в глуте.
См. пример:
https://www.ecse.rpi.edu/Homepages/wrf/ ... eWheel.cpp
// Mouse wheel callback routine.
void mouseWheel(int wheel, int direction, int x, int y)
......
// Register the mouse wheel callback function.
glutMouseWheelFunc(mouseWheel);
Re: Не получается захватить колесо мышки
Добавлено: 11 ноя 2016, 17:17
Romeo
Если есть готовый callback, то это значительно упрощает задачу.
Re: Не получается захватить колесо мышки
Добавлено: 11 ноя 2016, 21:14
Skwoogey
callback для колесика - привилегия фриглата (по крайней мере для винды). Glut-ов вообще несколько, конкретно мой не умеет. Да, логичнее всего просто фриглат поставить, но "вешать крюк" звучит гораздо веселее. В общем, спасибо за помощь.
Re: Не получается захватить колесо мышки
Добавлено: 22 мар 2017, 08:51
Сионист
А зачем вообще мучиться глутом? Пишите свой главный цикл и свои оконные "процедуры".
Re: Не получается захватить колесо мышки
Добавлено: 22 мар 2017, 08:59
Romeo
Великолепная позиция.... Это всё равно, что ответить на твой вопрос в соседней теме следующее: А зачем ты вообще используешь системное окно редактирования? Напиши своё.
Re: Не получается захватить колесо мышки
Добавлено: 22 мар 2017, 09:04
Сионист
Одно дело мелкий кусок, например, редактирование текста в окне, а совсем другое - вся программа. Если так клевать на готовое, то берите уж целиком готовую софтину. Не устраивает? Странно. А писать мелкие куски в готовой софтине с закрытым исходником почему устраивает?
Напиши своё.
Ну может в конце концов так и сделаю. Когда надоест преобразовывать строку из UTF32 в UTF16 и обратно целиком.
Re: Не получается захватить колесо мышки
Добавлено: 22 мар 2017, 09:11
Romeo
А как по мне - идентичные ситуации.
Re: Не получается захватить колесо мышки
Добавлено: 22 мар 2017, 09:20
Сионист
Romeo писал(а):А как по мне - идентичные ситуации.
Да ну! Ну попробуйте убедить Михалкова переделать "титаник" в следующую серию "утомлённых солнцем" путём вклеивания туда десяти своих кадриков, причём, вслепую и через замочную скважину. А включить в "в бой идут одни "старики"" кусок военной хроники - это как раз вполне возможно и замысла не рушит и на столе это делается гораздо удобней.