GLUT_LEFT_BUTTON. GLUT_MIDDLE_BUTTON. GLLfT_RIGHT_BUTTON.

причем смысл этих значений очевиден (левая кнопка, средняя кнопка, правая кнопка). Параметр state должен быть равен GLUTJJP или GLUTJDOWN (вверх или вниз). Значения х и у сообщают о положении мыши в момент события. Но будьте внимательны: величина х, как и следовало ожидать, равна числу пикселов от левого края окна, в то время как величина у равна числу пикселов вниз от верха окна!

Пример 2.4.1. Размещение точек с помощью мыши Начнем с элементарного, но важного примера. Каждый раз, когда пользователь нажимает левую кнопку мыши, на экране рисуется точка в месте нахождения мыши. Если же пользователь нажимает правую кнопку, программа прекращает работу. Эту работу выполняет показанная ниже версия функции myMouse ( ). Заметим, что поскольку г/-координата мыши равна числу пикселов от верха экранного окна, мы рисуем точку с координатами не (x, у),а(х, screenHeight-y), где screenHeight - высота окна в пикселах:

void myMouse (int button, int state, int x. int y)

{

if(button - GLUT_L£FT_BUTTON && state - GLUT_D0WN) drawDot(x. screenHeight -y);

2.4. Простое взаимодействие с помощью мыши и клавиатуры

else if (button == GLUTJRIGHTJUTTON && state - GLUTJDOWN) exit(-l);

}

Аргумент -1 стандартной функции exit О просто возвращает -1 операционной системе; обычно эту величину игнорируют.

Пример 2.4.2. Задание прямоугольника с помощью мыши В этом примере мы хотим, чтобы пользователь мог рисовать прямоугольники, размеры которого вводятся с помощью мыши. Пользователь отмечает мышью две точки, задающие противоположные углы выровненного прямоугольника, и по ним рисуется прямоугольник. Данные для каждого прямоугольника не требуется сохранять: каждый новый прямоугольник заменяет предыдущий. Пользователь может очищать экран нажатием правой кнопки мыши.

Листинг 2.15. Подпрограмма обратного вызова для рисования прямоугольников, вводимых с помощью мыши

void myMousetint button, int state, int x, int y) {

static GLintPoint corner[2]:

static int numCorners =0: // initial value is 0 // начальное значение равно 0


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