glutSetMenu (menuID); Далее активизированное меню становится текущим, и оно будет всплывать в окне при нажатии кнопки мыши, соотнесенной с этим меню.

Для удаления меню используется следующая команда.

glutDestroyMenu (menuID); Если удаленное меню являлось текущим меню окна, статус текущего не переходит ни на одно из оставшихся меню (таким образом, в данном окне нет текущего меню).

Приведенная ниже функция используется для получения идентификатора текущего меню в текущем окне на экране дисплея.

currentMenuID = glutGetMenu ( ); Значение 0 возвращается, если данное окно не имеет меню, или если предыдущее текущее меню было удалено с помощью функции glutDestroyMenu.

СОЗДАНИЕ ПОДМЕНЮ GLUT

Подменю можно соотнести с меню, вначале создав подменю со списком опций с помощью команды glutCreateMenu, а затем перечислив подменю как дополнительные опции в основном меню. Чтобы добавить подменю в список опций основного меню (или другого подменю), используется последовательность операторов, подобная приведенной ниже.

submenuID = glutCreateMenu (submenuFcn);

glutAddMenuEntry ("Первый пункт подменю", 1);

glutCreateMenu (menuFcn);

glutAddMenuEntry ("Первый пункт меню", 1);

glutAddSubMenu ("Опции подменю", эиЬшепиЮ) ; Чтобы добавить подменю к текущему меню, можно также использовать функцию glutAddSubMenu.

В приведенной ниже программе иллюстрируется создание подменю. Эта программа (модификация предыдущей) отображает подменю, предлагающее выбор из трех цветов (синий, зеленый и белый) для первых двух вершин треугольника. В основном меню теперь есть список из трех опций, причем третья опция отображена с символом стрелочки, указывающим, что при выделении данной опции выпадает подменю, как показано на рис. 11.17. После функций создания основного меню и подменю включена функция glutPostRedisplay.

Всплывающее основное меню и подменю OpenGL, полученные с помощью демонстрационной программы создания подменю

Рис. 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;


⇐ вернуться назад | | далее ⇒