void mouse_callback_function(int button, int state,

int x, int у)

{
if(button == GLUT_LEFT_BUTTON && state == GLUT_D0WN) exit();
}

Любое другое сочетание показаний события - отпускание левой кнопки или любые манипуляции с правой кнопкой - останутся без внимания со стороны прикладной программы, поскольку в функции с обратным вызовом никаких действий на этот случай не предусмотрено.

Следующий пример продемонстрирует достоинство той структуры программы, которая была описана в предыдущей главе. Разработаем программу, которая будет вычерчивать небольшой квадратик на экране в том месте, где установлен маркер мыши в момент нажатия левой кнопки. Нажатие средней кнопки мыши должно привести к завершению работы выполнения программы.

Функция main( ) новой программы будет выглядеть практически так же, как и аналогичная функция в предыдущем примере8.

int main(int arge, char **argv) {
glutlnit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutCreateWindow("square"); myinit();

7 В некоторых операционных системах нажатие и отпускание кнопки рассматривается как единое событие.

8 Мы будем использовать соглашение об именовании функций с обратным вызовом, регламентированное в руководстве OpenGL Programmer's Guide [Оре97,а].

Ввод и взаимодействие с пользователем

glutReshapeFunc(myReshape); glutMouseFunc(mouse); glutDisplayFunc(display); glutMainLoop();
}

Событие перерисовки возбуждается операционной системой при любом изменении размеров или положения окна приложения, которое может возникнуть по требованию пользователя. Реакцию прикладной программы на это событие мы рассмотрим ниже. В этом примере нет нужды использовать функцию отображения с обратным вызовом, поскольку графические примитивы формируются только в ответ на щелчок кнопкой мыши. Но библиотека GLUT требует, чтобы каждое приложение содержало функцию отображения с обратным вызовом, а потому нам придется ее определить как пустую.

void display(){ }

На события мыши будет реагировать функция с обратным вызовом mouse(): void mouse(int btn, int state, int x, int у) {


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