Мы будем рассматривать только те события, которые распознаются библиотекой GLUT, хотя операционные системы, подобные X Window, распознают гораздо более широкий класс событий. Но в библиотеку GLUT включены средства распознавания только тех событий, которые являются общими для большинства существующих операционных систем и представляют интерес для разработчиков графических приложений. С устройством указания, в качестве которого чаще всего используется мышь, ассоциируются события двух типов. Событие типа перемещение возбуждается в том случае, если мышь перемещается при нажатой кнопке (любой из имеющихся на устройстве). Если мышь перемещается, но при этом никакая кнопка

3.5. Программирование ввода, управляемого событиями не удерживается в нажатом состоянии, это событие рассматривается как пассивное перемещение. Положение мыши - показание этого устройства ввода - становится доступным прикладной программе после возникновения события типа перемещение. Другой тип события - событие мыши - возбуждается в случае, если пользователь нажал или отпустил любую из кнопок. Пока кнопка удерживается нажатой, никакие события не возбуждаются (если, конечно, мышь не перемешается) до тех пор, пока кнопка не будет отпущена7. Передаваемая при этом информация - показания устройства - включает идентификатор кнопки, послужившей причиной возникновения события, ее состояние после возникновения события (нажата или отпущена) и положение маркера мыши в координатах экрана. Регистрация в операционной системе функции мыши с обратным вызовом обычно выполняется в теле функции main( ) через вызов функции библиотеки GLUT:

glutMouseFunc(mouse_callback_fune)

Функция с обратным вызовом для мыши должна иметь формат

void mouse_callback_func(int button, int state, int x, int y);

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


⇐ Предыдущая| |Следующая ⇒