menu_test.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:4k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1997. */
  2. /* This program is freely distributable without licensing fees 
  3.    and is provided without guarantee or warrantee expressed or 
  4.    implied. This program is -not- in the public domain. */
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <GL/glut.h>
  8. int win, subwin;
  9. int mainmenu, submenu;
  10. int item = 666;
  11. void
  12. display(void)
  13. {
  14.   glClear(GL_COLOR_BUFFER_BIT);
  15.   glFlush();
  16. }
  17. /* ARGSUSED1 */
  18. void
  19. gokey(unsigned char key, int x, int y)
  20. {
  21.   char str[100];
  22.   int mods;
  23.   mods = glutGetModifiers();
  24.   printf("key = %d, mods = 0x%xn", key, mods);
  25.   if (mods & GLUT_ACTIVE_ALT) {
  26.     switch (key) {
  27.     case '1':
  28.       printf("Change to sub menu 1n");
  29.       glutChangeToSubMenu(1, "sub 1", submenu);
  30.       break;
  31.     case '2':
  32.       printf("Change to sub menu 2n");
  33.       glutChangeToSubMenu(2, "sub 2", submenu);
  34.       break;
  35.     case '3':
  36.       printf("Change to sub menu 3n");
  37.       glutChangeToSubMenu(3, "sub 3", submenu);
  38.       break;
  39.     case '4':
  40.       printf("Change to sub menu 4n");
  41.       glutChangeToSubMenu(4, "sub 4", submenu);
  42.       break;
  43.     case '5':
  44.       printf("Change to sub menu 5n");
  45.       glutChangeToSubMenu(5, "sub 5", submenu);
  46.       break;
  47.     }
  48.   } else {
  49.     switch (key) {
  50.     case '1':
  51.       printf("Change to menu entry 1n");
  52.       glutChangeToMenuEntry(1, "entry 1", 1);
  53.       break;
  54.     case '2':
  55.       printf("Change to menu entry 2n");
  56.       glutChangeToMenuEntry(2, "entry 2", 2);
  57.       break;
  58.     case '3':
  59.       printf("Change to menu entry 3n");
  60.       glutChangeToMenuEntry(3, "entry 3", 3);
  61.       break;
  62.     case '4':
  63.       printf("Change to menu entry 4n");
  64.       glutChangeToMenuEntry(4, "entry 4", 4);
  65.       break;
  66.     case '5':
  67.       printf("Change to menu entry 5n");
  68.       glutChangeToMenuEntry(5, "entry 5", 5);
  69.       break;
  70.     case 'a':
  71.     case 'A':
  72.       printf("Adding menu entry %dn", item);
  73.       sprintf(str, "added entry %d", item);
  74.       glutAddMenuEntry(str, item);
  75.       item++;
  76.       break;
  77.     case 's':
  78.     case 'S':
  79.       printf("Adding submenu %dn", item);
  80.       sprintf(str, "added submenu %d", item);
  81.       glutAddSubMenu(str, submenu);
  82.       item++;
  83.       break;
  84.     case 'q':
  85.       printf("Remove 1n");
  86.       glutRemoveMenuItem(1);
  87.       break;
  88.     case 'w':
  89.       printf("Remove 2n");
  90.       glutRemoveMenuItem(2);
  91.       break;
  92.     case 'e':
  93.       printf("Remove 3n");
  94.       glutRemoveMenuItem(3);
  95.       break;
  96.     case 'r':
  97.       printf("Remove 4n");
  98.       glutRemoveMenuItem(4);
  99.       break;
  100.     case 't':
  101.       printf("Remove 5n");
  102.       glutRemoveMenuItem(5);
  103.       break;
  104.     }
  105.   }
  106. }
  107. void
  108. keyboard(unsigned char key, int x, int y)
  109. {
  110.   glutSetMenu(mainmenu);
  111.   gokey(key, x, y);
  112. }
  113. void
  114. keyboard2(unsigned char key, int x, int y)
  115. {
  116.   glutSetMenu(submenu);
  117.   gokey(key, x, y);
  118. }
  119. void
  120. menu(int value)
  121. {
  122.   printf("menu: entry = %dn", value);
  123. }
  124. void
  125. menu2(int value)
  126. {
  127.   printf("menu2: entry = %dn", value);
  128. }
  129. int
  130. main(int argc, char **argv)
  131. {
  132.   glutInit(&argc, argv);
  133.   win = glutCreateWindow("menu test");
  134.   glClearColor(0.3, 0.3, 0.3, 0.0);
  135.   glutDisplayFunc(display);
  136.   glutKeyboardFunc(keyboard);
  137.   submenu = glutCreateMenu(menu2);
  138.   glutAddMenuEntry("Sub menu 1", 1001);
  139.   glutAddMenuEntry("Sub menu 2", 1002);
  140.   glutAddMenuEntry("Sub menu 3", 1003);
  141.   mainmenu = glutCreateMenu(menu);
  142.   glutAddMenuEntry("First", -1);
  143.   glutAddMenuEntry("Second", -2);
  144.   glutAddMenuEntry("Third", -3);
  145.   glutAddSubMenu("Submenu init", submenu);
  146.   glutAttachMenu(GLUT_RIGHT_BUTTON);
  147.   subwin = glutCreateSubWindow(win, 50, 50, 50, 50);
  148.   glClearColor(0.7, 0.7, 0.7, 0.0);
  149.   glutDisplayFunc(display);
  150.   glutKeyboardFunc(keyboard2);
  151.   glutMainLoop();
  152.   return 0;             /* ANSI C requires main to return int. */
  153. }