Как изменить курсор на строку в окне OpenGL? - PullRequest
1 голос
/ 23 августа 2011

Я хочу иметь красную линию вместо указателя мыши в моем приложении (написано на C ++ с OpenGL). Например, когда я перемещаю мышь над окном OpenGL, я бы хотел, чтобы курсор стал красной линией. Как я могу это сделать?

Кроме того, как я могу вызвать связанные с мышью функции (OpenGL) для этой строки и указать функциональность?

1 Ответ

0 голосов
/ 24 августа 2011

Как сказал Ник Болас в своем комментарии, OpenGL ничего не знает о мышке. Вам нужно будет так или иначе взаимодействовать с системой управления окнами (через прямой Win32 / X11 / etc. API или через переносную библиотеку управления окнами в виде Qt, wxWidgets и т. Д.), Чтобы отслеживать положение мыши.

Если курсор, который вы пытаетесь нарисовать, является растровым изображением, ваша лучшая ставка, скорее всего, будет обрабатывать события входа / выхода мыши, отправленные в ваше окно, и реагировать на них, используя функцию API для изменения курсора. Это будет обрабатывать автоматическое обновление курсора при перемещении мыши и добавит минимальные накладные расходы вашему приложению (курсоры оконной системы обычно рисуют в плоскости наложения, что позволяет избежать отправки событий перерисовки в ваше окно при каждом перемещении мыши).

Если у вас есть более процедурное описание вашего курсора (то есть вы намереваетесь нарисовать его с помощью команд рисования OpenGL), вы вместо этого захотите обрабатывать события ввода / вывода мышью, используя HideCursor()/ShowCursor() команды или эквивалентный отключить собственный курсор оконной системы, когда мышь находится над окном. Затем вы перехватите обратные вызовы перемещения мыши и перерисоваете сцену, добавив все необходимые вам команды, чтобы нарисовать курсор в позиции, указанной в событии перемещения мыши.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...