3.5. Программирование ввода, управляемого событиями цию с обратным вызовом и зарегистрировать ее в операционной системе с помощью функции glutMotionFunc(). В нашей программе уже есть такая функция - drawSquare(), а потому остается просто зарегистрировать ее в качестве функции с обратным вызовом:
glutMotionFunc(drawSquare);
Теперь можно отслеживать на экране траекторию движения мыши, которая будет обрисовываться прямоугольной кистью.
3.5.3. События клавиатуры
В качестве одного из устройств ввода очень часто в графических приложениях используется и клавиатура. События клавиатуры возбуждаются в том случае, если на клавиатуре нажата одна из клавиш в тот момент, когда маркер мыши на экране находится в области окна приложения. В некоторых операционных системах событие клавиатуры возбуждается и при отпускании клавиши, но в библиотеке GLUT на этот случай функция регистрации обратного вызова не предусмотрена. При возбуждении события операционная система передает в прикладную программу ASCII-код нажатой клавиши и координату положения маркера мыши в окне приложения. Регистрация функции обработки события клавиатуры выполняется функцией glutKeyboardFunc():
glutKeyboardFunc(keyboard);
Если, например, в приложении с помощью клавиатуры планируется только сигнализировать программе о завершении работы, то функция обработки события клавиатуры будет иметь вид
void keyboard(unsigned char key, int x, int у) {
if(key=='q' И key == 'Q') exit();
}
3.5.4. Функции отображения и простоя Из еще не рассмотренных функций с обратным вызовом две заслуживают особого внимания - это функция отображения и функция простоя (idle). Функция отображения упоминалась в главе 2. Она регистрируется в операционной системе с помощью функции glutDisplayFunc() из библиотеки типов GLUT:
glutDisplayFunc(display);
Функция, указанная в glutDisplayFunc(), будет вызываться каждый раз, когда потребуется перерисовка изображения. Одна из таких ситуаций- инициализация окна приложения. Поскольку заранее известно, что событие отображения возбуждается, когда открывается окно приложения, то в эту функцию желательно включить все операции вывода, не связанные с взаимодействием с пользователем. Исполнительная система GLUT требует, чтобы в каждом графическом приложении была определена функция отображения с обратным вызовом.