请问怎么用openGL和C++编出一个下拉菜单程序,

请问怎么用openGL和C++编出一个下拉菜单程序,,第1张

你好,给你一段说明,你看看吧,希望能帮到你!

GLUT提供了一系列的函数对多种d出式菜单和子菜单进行处理。利用GLUT创建一个菜单主要包括创建菜单、创建菜单项、指定选择菜单项的鼠标按键等步骤。

首先,可以使用菜单注册函数:

glutCreateMenu(ProcessMenu);

创建一个d出式菜单,它指定ProcessMenu作为菜单回调函数,该函数包含一个参数:

void ProcessMenu(int value);

其中,value用于确定用户选择菜单项的ID值,以进行相应的处理。此时该菜单已与窗口关联起来。

在创建了菜单之后,需要使用函数在菜单中加入菜单项:

void glutAddMenuEntry(char name, GLint value);

其中,参数name指定菜单项显示的名称,value则指定的菜单项对应的ID,当这个菜单项被选中时,这个ID值会传给菜单回调函数。

最后,使用下面的函数将菜单与某个鼠标按键关联起来:

void glutAttachMenu(button);

其中,参数button用符号常量GLUT_LEFT_BUTTON,GLUT_MIDDLE_BUTTON,GLUT_RIGHT_BUTTON指定鼠标的左键、中键和右键。

由于在一个窗口内可以使用多个菜单,因此GLUT通过为菜单提供一个整数标识符的方式实现多窗口的管理。这个整数标识符是在菜单创建时由系统从1开始顺序分配的,通常可以用下面的语句获得这个标识符:

int nMenu = glutCreateMenu(ProcessMenu);

在有了这个标识符后,可以用函数glutSetMenu(nMenu)指定对应的菜单为当前的菜单;用函数glutDestroyMenu(nMenu)删除对应的菜单;也可以用函数glutAddSubMenu(“模式”, nMenu)将对应的菜单指定为当前的菜单的一个名为“模式”的子菜单。

#include<stdioh>

#include <stdlibh>

void hello()

{

printf("hello world\n");

}

int main()

{

 int x;

 while (1)

 {

  printf("------------- *** 作选项-----------\n");

  printf("1:返回菜单 \n");

  printf("2:退出程序 \n");

  printf("3:执行 *** 作 \n");

  printf("--------------------------------\n");

 

  printf("按数字键选择要执行的 *** 作: ");

  scanf("%d",&x);

  printf("\n");

  //输入2跳出循环,退出程序

  if(x==2)

  break;

  

  switch(x)

  {

  case 1:  break; //输入1,跳出switch语句,进入下一次循环

  case 3:  hello();break;  

  default:  //数字输入错误,跳出siwtch语句,进入下一次循环

  printf("输入的数字不正确\n");

  break;

  }

 }

 return 0;

}

说明:有3个选项,1是用返回菜单,2是用于退出程序,3是用于执行相关的 *** 作,这里只是一个示例,所以将要执行的 *** 作,编写成了一个输出hello world的函数。

用select或者while都可以实现的,给你个框架,里面的小程序自己写:

#!/bin/bash

trap "" 2 3 15

MYDATE=`date "+%D %T"`

THIS_HOST=`hostname`

USER=`whoami`

#function:打开即时响应模式,读取用户点击的键值

read_char()

{

SAVESTTY=`stty -g`

stty raw

stty -echo

dd if=/dev/tty bs=1 count=1 2>/dev/null

stty -raw

stty echo

stty $SAVESTTY

}

#function:颜色模式

colour()

{

case $1 in

black_green)

echo '^[[40;32m'

;;

black_yellow)

echo '^[[40;33m'

;;

black_white)

echo '^[[40;37m'

;;

black_cyan)

echo '^[[40;36m'

;;

red_yellow)

echo '^[[41;33m'

;;

white_black)

echo '^[[47;30m'

;;

esac

}

#退出动作

my_exit()

{

colour black_white

exit 0

}

while :

do

tput clear

colour black_green

cat <<MAYDAY

--------------------------------------------------------------------------------

USER:$USER                  HOST:$THIS_HOST              DATE:$MYDATE

--------------------------------------------------------------------------------

                      1:计算1到n的奇数之和

                      2:计算1到n的阶乘

                      3:计算1到n的所有质数

                      Q:退出程序

--------------------------------------------------------------------------------

MAYDAY

colour black_cyan

echo "Your Choice[1,2,3,Q]>" 

read CHOICE

CHOICE=`read_char`

case $CHOICE in

1);;

2);;

3);;

Q|q)my_exit;;

)echo "unknow choice!!";;

esac

echo  "Hit the ENTER key to return continue!"

read XXAA

done

有不懂得问我。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12180744.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存