glutCreateMenu(demo_menu); glutAddMenuEntry("quit", 1); glutAddMenuEntry("increase square size", 2); glutAddMenuEntry("decrease square size", 3); glutAttachMenu(GLUT_RIGHT_BUTTON);
Функция glutAddMenuEntry() формирует очередной пункт меню и ее второй аргумент - идентификатор, который будет передаваться функции обработки с обратным вызовом при выборе этого пункта. Текст функции обработки меню с обратным вызовом приведен ниже.
void demo_menu(int id) {
if(id == 1) exit( ); else if (id == 2) size = 2 * size; else if (size > 1) size = size/2; glutPostRedisplay( );
}
Обращение к функции glutPostResdisplay() запрашивает перерисовку изображения, которое выполняется той функцией отображения, которая зарегистрирована функцией glutDis-playFunc(). В результате после завершения выполнения demo_menu() на экране восстановится картинка без изображения меню.
Библиотека GLUT поддерживает работу и с иерархическими меню (рис. 3.17). Пусть, например, главное меню состоит только из двух пунктов. При выборе первого пункта выполнение программы завершается, а при выборе второго на экран выводится подменю. Это подменю содержит два пункта, позволяющих увеличивать или уменьшать размеры квадратиков, формируемых функцией drawSquare(). Для организации такого иерархического меню в функцию main() следует включить следующий фрагмент:
sub_menu = glutCreateMenu(size_menu); glutAddMenuEntry("increase square size", 2); glutAddMenuEntry("decrease square size", 3); glutCreateMenu(top_menu); glutAddMenuEntry("quit",1); glutAddSubMenu("Resize", subjnenu); glutAttachMenu(GLUT_RIGHT_BUTTON);
Функции обработки size_menu() и top_menu() я предлагаю читателям разработать самостоятельно (см. упр. 3.5).
quit
increase square size decrease square size
Рис 3.17. Иерархическое меню
Ввод и взаимодействие с пользователем
3.7. Указание объектов Указание объектов (picking) - это одна из операций ввода, которая позволяет пользователю передать прикладной программе информацию о выборе того или иного из изображенных на экране объектов. Хотя при реализации этой операции и используется то же самое физическое устройство, что и для операции локализации позиции на экране, в информационном плане они значительно отличаются. В графических системах с растровым способом создания отображения реализация операции указания объектов связана со значительными сложностями.