如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
OpenGL编程轻松入门之菜单管理2006-05-2308:55作者:黄燕出处:天极开发责任编辑:方舟菜单是我们经常使用的工具,很方便,直观。本节讨论在OpenGL中如何进行菜单管理。例17:本例在蓝色的背景上绘制一个白色的正方形,在窗口内单击鼠标右键,弹出菜单,当选择不同菜单项时命令窗口会显示出是哪个菜单的哪个菜单相被激活。本例一个主菜单,主菜单有3个菜单条目及两个子菜单。两个子菜单都有3个菜单条目。#include<GL/glut.h>#include<stdio.h>intmenu,subMenu1,subMenu2;/*在蓝色的背景上绘制一个白色的正方形*/voidmyDraw(void){glClearColor(0.0,0.0,1.0,0.0);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(1.0,1.0,1.0);glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);glBegin(GL_POLYGON);glVertex2f(-0.5,-0.5);glVertex2f(-0.5,0.5);glVertex2f(0.5,0.5);glVertex2f(0.5,-0.5);glEnd();glutSwapBuffers();}/*写出当前是哪个菜单*/voidGetCurrentMenu(void){intnMenu;nMenu=glutGetMenu();if(nMenu==menu)printf("ThecurrentmenuisMainMenu.\n");if(nMenu==subMenu1)printf("ThecurrentmenuisSubMenu1.\n");if(nMenu==subMenu2)printf("ThecurrentmenuisSubMenu2.\n");}/*子菜单1*/voidSubMenuFunc1(intdata){GetCurrentMenu();switch(data){case1:printf("SubMenu1'sitem1istriggered.\n");break;case2:printf("SubMenu1'sitem2istriggered.\n");break;case3:printf("SubMenu1'sitem3istriggered.\n");break;}}/*子菜单2*/voidSubMenuFunc2(intdata){GetCurrentMenu();switch(data){case1:printf("SubMenu2'sitem1istriggered.\n");break;case2:printf("SubMenu2'sitem2istriggered.\n");break;case3:printf("SubMenu2'sitem3istriggered.\n");break;}}/*主菜单*/voidMenuFunc(intdata){GetCurrentMenu();switch(data){case1:printf("MainMenu'sitem1istriggered.\n");break;case2:printf("MainMenu'sitem2istriggered.\n");break;case3:printf("MainMenu'sitem3istriggered.\n");break;}}intmain(intargc,char**argv){/*初始化*/glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);glutInitWindowSize(500,400);glutInitWindowPosition(100,100);/*创建窗口*/glutCreateWindow("MENU");glutDisplayFunc(myDraw);/*创建子菜单1并加入菜单条目*/subMenu1=glutCreateMenu(SubMenuFunc1);glutAddMenuEntry("SubMenu1'sitem1",1);glutAddMenuEntry("SubMenu1'sitem2",2);glutAddMenuEntry("SubMenu1'sitem3",3);glutAttachMenu(GLUT_RIGHT_BUTTON);/*创建子菜单2并加入菜单条目*/subMenu2=glutCreateMenu(SubMenuFunc2);glutAddMenuEntry("SubMenu2'sitem1",1);glutAdd