glutSetMenu (menuID); Далее активизированное меню становится текущим, и оно будет всплывать в окне при нажатии кнопки мыши, соотнесенной с этим меню.
Для удаления меню используется следующая команда.
glutDestroyMenu (menuID); Если удаленное меню являлось текущим меню окна, статус текущего не переходит ни на одно из оставшихся меню (таким образом, в данном окне нет текущего меню).
Приведенная ниже функция используется для получения идентификатора текущего меню в текущем окне на экране дисплея.
currentMenuID = glutGetMenu ( ); Значение 0 возвращается, если данное окно не имеет меню, или если предыдущее текущее меню было удалено с помощью функции glutDestroyMenu.
СОЗДАНИЕ ПОДМЕНЮ GLUT
Подменю можно соотнести с меню, вначале создав подменю со списком опций с помощью команды glutCreateMenu, а затем перечислив подменю как дополнительные опции в основном меню. Чтобы добавить подменю в список опций основного меню (или другого подменю), используется последовательность операторов, подобная приведенной ниже.
submenuID = glutCreateMenu (submenuFcn);
glutAddMenuEntry ("Первый пункт подменю", 1);
glutCreateMenu (menuFcn);
glutAddMenuEntry ("Первый пункт меню", 1);
glutAddSubMenu ("Опции подменю", эиЬшепиЮ) ; Чтобы добавить подменю к текущему меню, можно также использовать функцию glutAddSubMenu.
В приведенной ниже программе иллюстрируется создание подменю. Эта программа (модификация предыдущей) отображает подменю, предлагающее выбор из трех цветов (синий, зеленый и белый) для первых двух вершин треугольника. В основном меню теперь есть список из трех опций, причем третья опция отображена с символом стрелочки, указывающим, что при выделении данной опции выпадает подменю, как показано на рис. 11.17. После функций создания основного меню и подменю включена функция glutPostRedisplay.
Рис. 11.17. Всплывающее основное меню и подменю OpenGL, полученные с помощью демонстрационной программы создания подменю
♦include <GL/glut.h>
GLsizei winWidth = 400, winHeight *» 400;
/* Исходный размер окна на экране дисплея. */
GLfloat red = 1.0, green = 1.0, blue = 1.0;
/* Исходные значения цветов. */
GLenum renderingMode = GL_SMOOTH;
/* Исходный метод заполнения. */
void init (void) {
glClearColor (0.6, 0.6, 0.6, 1.0);
/* Цвет окна выбирается серым. */ glMatrixMode (GL_PROJECTION); gluOrtho2D (0.0, 300.0, 0.0, 300.0);
}
void mainMenu (GLint renderingOption)
{
switch (renderingOption) {
case 1: renderingMode = GL_FLAT; break;
case 2: renderingMode = GL_SMOOTH; break;
}
glutPostRedisplay ( );
}
/* Значений цветов устанавливаются согласно выбранной
* опции подменю.
*/
void colorSubMenu (GLint colorOption)
{
switch (colorOption) { case 1:
red = 0.0; green - 0.0; blue = 1.0;
break; case 2:
red = 0.0; green = 1.0; blue = 0.0;