С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
1

GUI и проверка координат мыши

02.04.2023, 16:37. Показов 600. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,

Пытаюсь реализовать простой графический интерфейс на основе рисования примитивов с помощью OpenGl(обертки) и получается такая вещь, что при отрисовки каждого кадра - приходится проверять координаты курсора мыши на "столкновение" с каждый элементом GUI: кнопок, менюшек, ползунков.

То есть даже если курсор мыши не двигается и вообще условный пользователь ушел спать, то код, который контролирует GUI, просто будет молотить 30-60 кадров в секунду проверки на "столкновение" всех элементов GUI c курсором мыши.

Это вообще так и делается или это не нормально так тратить процессорное время ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2023, 16:37
Ответы с готовыми решениями:

Опять же проверка координат мыши
Всем здрасьте , очередная ошибка , которая внедряет меня в недоумевание .... Как и предлагал Игорь...

Проверка координат мыши
Всем доброго времени суток!У меня важный вопрос,на который я уже долгое время не могу найти...

Проверка координат курсора мыши
Добрый день. Имеется вот такой код для рисования полигона с помощью мыши : using System; using...

Получение координат элемента или координат мыши на элементе
Добрый день. Имеется форма wpf На ней имеется grid в гриде установлен фон картинкой. грид с...

При опросе координат курсора и состояния кнопок мыши (int 33h ax=0003h), значение координат не изменяется
Не пойму в чём проблема. Графический режим, прога ждёт нажатия левой кнопки, после этого в регистры...

10
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
03.04.2023, 00:10 2
По событиям от мыши.
0
576 / 477 / 100
Регистрация: 05.08.2022
Сообщений: 2,626
03.04.2023, 09:35 3
Что есть
Цитата Сообщение от Optimus11 Посмотреть сообщение
проверки на "столкновение" всех элементов GUI c курсором мыши
?
Что за "столкновение" такое? что из него следует, какие действия?
Обычно на мышь программа реагирует по нажатию кнопки - только тогда и есть смысл обрабатывать координаты. Или у вас картинка меняется просто от движения мыши?

Впрочем, выше уже сказали, что обрабатывать надо только события мыши, надеюсь в вашем фреймворке они есть.
0
118 / 86 / 35
Регистрация: 07.11.2022
Сообщений: 355
03.04.2023, 12:05 4
Цитата Сообщение от Optimus11 Посмотреть сообщение
графический интерфейс на основе рисования примитивов с помощью OpenGl(обертки) ..... каждый элементом GUI: кнопок, менюшек, ползунков
Откуда в OpenGl кнопки, менюшки, ползунки ?
0
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
03.04.2023, 12:07  [ТС] 5
Цитата Сообщение от KSergey9 Посмотреть сообщение
Что есть

?
Что за "столкновение" такое? что из него следует, какие действия?
Обычно на мышь программа реагирует по нажатию кнопки - только тогда и есть смысл обрабатывать координаты. Или у вас картинка меняется просто от движения мыши?

Впрочем, выше уже сказали, что обрабатывать надо только события мыши, надеюсь в вашем фреймворке они есть.
Я рисую в окне к примеру кнопку - то есть обычный закрашенный прямоугольник с координатами. Положение нарисованной кнопки не меняется.
Курсор мыщи естественно двигается по окну и постоянно меняет координаты. Мне естественно нужно знать зашел ли курсор мыши в область моей нарисованной кнопки. Поэтому каждый кадр приходится высчитывается положение курсора мыши на "столкновение" с моей кнопкой. Это не WinApi или подобные системы - где при клике вызывается колбек.
0
Эксперт функциональных языков программированияЭксперт С++
4144 / 1969 / 958
Регистрация: 01.06.2021
Сообщений: 6,973
Записей в блоге: 6
03.04.2023, 12:07 6
Optimus11, однозначно так нельзя. Зачем вам обрабатывать координаты мыши даже тогда, когда они вам не нужны? Вы же кликаете на какие-то элементы gui, так значит по этому клику и обрабатывайте. Например, в WinAPI можно добавить кейс WM_LBUTTONUP (срабатывает, когда отпускаете нажатую левую кнопку мыши в окне программы) в главную процедуру WindowProc. В таком случае координаты можно получить так:
C++
1
2
xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam);
Прим. : Можно, конечно, брать координаты через LOWORD или HIWORD непосредственно, но рекомендовано использовать GET_X_LPARAM и GET_Y_LPARAM из windowsx.h.
0
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
03.04.2023, 12:08  [ТС] 7
Цитата Сообщение от NEED-A-JOB Посмотреть сообщение
Откуда в OpenGl кнопки, менюшки, ползунки ?
на основе рисования примитивов с помощью OpenGl(обертки)... отсюда ?

Добавлено через 57 секунд
Цитата Сообщение от Royal_X Посмотреть сообщение
Optimus11, однозначно так нельзя. Зачем вам обрабатывать координаты мыши даже тогда, когда они вам не нужны? Вы же кликаете на какие-то элементы gui, так значит по этому клику и обрабатывайте. Например, в WinAPI можно добавить кейс WM_LBUTTONUP (срабатывает, когда отпускаете нажатую левую кнопку мыши в окне программы) в главную процедуру WindowProc. В таком случае координаты можно получить так:
C++
1
2
xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam);
Прим. : Можно, конечно, брать координаты через LOWORD или HIWORD непосредственно, но рекомендовано использовать GET_X_LPARAM и GET_Y_LPARAM из windowsx.h.
Ну я знаю как устроено в WInApi - но я же в данном случае его не использую.
1
Эксперт функциональных языков программированияЭксперт С++
4144 / 1969 / 958
Регистрация: 01.06.2021
Сообщений: 6,973
Записей в блоге: 6
03.04.2023, 12:12 8
Цитата Сообщение от Optimus11 Посмотреть сообщение
Ну я знаю как устроено в WInApi - но я же в данном случае его не использую.
но вы же когда рисуете, вы же нажимаете на кнопку мыши? значит берите координаты и делайте все проверки только когда нажата кнопка мыши.
1
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
03.04.2023, 12:29  [ТС] 9
Цитата Сообщение от Royal_X Посмотреть сообщение
но вы же когда рисуете, вы же нажимаете на кнопку мыши? значит берите координаты и делайте все проверки только когда нажата кнопка мыши.
Да я думал об этом, проблема возникает, когда нужно сделать небольшие эффекты типа изменения цвета при наведении на элемент GUI или всплывающая подсказка.
0
2710 / 864 / 327
Регистрация: 10.02.2018
Сообщений: 2,044
03.04.2023, 12:36 10
Цитата Сообщение от Optimus11 Посмотреть сообщение
Это вообще так и делается или это не нормально так тратить процессорное время ?
Мне думается, что это нормально. Так оно и должно работать в игрушках. Оконная событийная модель тут не работает. Всё построено на одном цикле, в который помещаются обновления и рисование. При обновлении происходит анализ текущего состояния манипуляторов (мышь, клавиатура, джойстик и т.д.) и интерпретация этого состояния в соответствии с текущим окружением. В игре мышь может не двигаться, но при этом могут двигаться игровые объекты и попадать под текущую позицию мыши. Логика работы может требовать какой-нибудь динамической подсветки объекта под курсором. Если же говорить про оконный интерфейс в различных игровых меню, то там придётся самостоятельно "превращать" состояния манипуляторов в собственные "события".
1
Эксперт функциональных языков программированияЭксперт С++
4144 / 1969 / 958
Регистрация: 01.06.2021
Сообщений: 6,973
Записей в блоге: 6
03.04.2023, 12:45 11
Цитата Сообщение от Optimus11 Посмотреть сообщение
проблема возникает, когда нужно сделать небольшие эффекты типа изменения цвета при наведении на элемент GUI или всплывающая подсказка.
для таких случаев все проверки можно сделать не в 30-60 кадров в секунду, а в 5 кадров в секунду, а то и меньше. Это можно сделать с помощью таймера.

Добавлено через 3 минуты
Ygg, да, но даже в игровых движках не все проверки лепят в update или physics_update, которые обновляются 60 и более кадров в секунду. От грамотной разработки зависит уровень оптимизации. Потом еще многие жалуются, мол игра вроде простая, но железо очень грузится даже на топовых девайсах.

Добавлено через 5 минут
я встречал тормознутую игры, где разраб использовал рейкастинг в 60 кадров в секунду, в то время, как в этом не было необходимости. Поверьте, пользователю особо не важно, когда всплывет его подсказка при наведении на графический элемент - через 200 мс или 20 мс.
2
03.04.2023, 12:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2023, 12:45
Помогаю со студенческими работами здесь

Перевод из декартовой системы координат в полярную (GUI)
Обращаюсь к последней моей надежде, ныть тут не буду о том что я не по своей вине пропустил пол...

Нажатие правой кнопой мыши по GUI кнопке
Всем привет! У меня возник такой вопрос: Можно ли реализовать нажатие правой кнопкой мыши по GUI...

GUI, событие при наведении курсора мыши на ScrollBar
Здравствуйте. На форме имеется listBox; когда навожу на него курсор мыши его размеры увеличиваются,...

Как без GUI слушать события клавиатуры/мыши?
Собственно, сабж. У программы нет какого-либо GUI (Графического интерфейса) и при нажатии...

Вывод координат мыши
Всем привет! Такая же проблема, но для ubuntu linux, x86_64, nasm. Составил работающую программу на...

Получение координат мыши в 3D
Какие есть алгоритмы конвертации координат мыши? Можно напрямую лучем уткнуться в z=100(если камера...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru