用c或c++编写一个多级菜单。至少三级。

来自:    更新日期:早些时候
请问C语言,菜单怎么弄,要有一级菜单,二级菜单,三级菜单?~

同求(用到什么知识点)

完美的24点运算与游戏程序

一个功能较全的24点程序

有倒计时的游戏计算模式(电子词典上那种)
和直接计算模式

Turbo C 3.0上编译通过

作者王煜城
Email:wyc890618 at 163 dot com
QQ:398872223



#include stdio.h 调用函数库
#include math.h
#include time.h
#include conio.h
#include string.h
#include stdlib.h
#include bios.h

#define SECOND 20 设定一秒钟长度
#define TIMELEFTX 35 定位TIME LEFT横坐标
#define TIMELEFTY 3 定位TIME LEFT纵坐标
#define MAXTIME 60 设定游戏模式的思考时间长度

void main()
{
void first(); 游戏模式
void second(); 计算模式
void third(); 离开
time_t t; 作时间种子
char get; 存储选择模式时的按键
srand((unsigned) time(&t)); 产生随机数的起始发生数据
for(;;)
{
clrscr(); 清屏
printf(24 POINTS SYSTEM v2.3n); 输出信息
printf(MADE BY DANTE WANGn);
printf(Oct.29th 2006nn);
printf(Please choose mode!nn);
printf(1. Game Moden);
printf(2. Count Moden);
printf(3. Quitnn);
get=getch(); 记录按键
switch(get)
{
case '1' first(); break; 调用函数first
case '2' second(); break; 调用函数second
case '3' third(); break; 调用函数third
default printf(Please input 1, 2 or 3!n);
getch(); 提示只输入1,2,3
}
if(get=='3') 判断是否退出循环
break;
}
}

void first() 游戏模式
{
int getstring(char p); 游戏模式时输入函数
int check(char p);
int exam2(char p,int a,int b,int c,int d);
int sign(int a,int b,int c,int d,int mode);
double figure(char p);
int n[4],i; 存储4张牌点数
char ch[100],ch1[100]; 存储输入数据
void draw(int p);
for(;;)
{
for(i=0;i4;i++)
{
n[i]=rand()%13+1; 随机产生4张牌的点数
}
draw(n); 画出开局
if(!sign(n[0],n[1],n[2],n[3],0))判断是否有解
{
printf(No answer!); 无解输出No answer!
getch();
continue; 循环重新进行
}
if(getstring(ch)) 判断是否在规定时间输入
{
if(!strcmp(strlwr(ch),quit))
输入内容与quit比较
break; 相同即退出
else
{
strcpy(ch1,ch); 否则将ch值递给ch1
if(!check(ch) &&
检查输入数据符号格式
!exam2(ch,n[0],n[1],n[2],n[3]) &&
检查输入数据数值格式
fabs(figure(ch1)-24)=0.000001)
判断答案是否为24
{
printf(nGood job!n);
getch(); 输出Good job!
}
else
{
printf(nWrong!nnAnswer );
sign(n[0],n[1],n[2],n[3],1);
getch();
答案错输出Wrong!Answer及答案
}
}
}
else
{
printf(nTime Over!nnAnswer );
sign(n[0],n[1],n[2],n[3],1);
getch();
超时间输出TimeOver!Answer及答案

}
}
}

void second() 计算模式
{
int n[4],i; 储存输入4数数值
char c[4][10]; 储存输入的数字字符



作者: ·兲兲· 2006-10-10 2216 回复此发言

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

2 完美的24点运算与游戏程序
int exam(char p);
int sign(int a,int b,int c,int d,int mode);
double recog(char p);
clrscr(); 清屏
printf(Input 0 to leave.nn);输出提示
for(;;)
{
for(i=0;i4;i++)
{
scanf(%s,&c[i]); 输入4数字符
if(exam(c[i])) 检查4数数值范围
{
printf(GRAMMER ERROR!n);
输出错误
i--; 重新输入
continue;
}
n[i]=(int)recog(c[i]); 将字符转化数值
if(n[i]==0)

return ; 值为0退出
}
sign(n[0],n[1],n[2],n[3],1); 输出正解
}
}

void third()
{
printf(Thanks for using this software!nn);
printf(If you have any advices or suggestions,nn);
printf(welcome to send email to [email protected]);
getch(); 输出个人信息
}

int sign(int a,int b,int c,int d,int mode)
{ mode=0为判断,=1为输出模式
char change(int x); 将数值转化成字符型数字
double figure(char p); 将字符型算数表达式求值
int i[4],n1,n2,n3,n4,s1,s2,s3,t,flag=0;
char s[4][2]={+,-,,},p[64]={0},p1[64]={0};
i[0]=a; 数组i用于存储4个数
i[1]=b; 数组s用于存储4种符号
i[2]=c; n1-n4分别存储0-3对应数组i不同
i[3]=d; 元素即四个求24点的数
for(n1=0;n14;n1++) s1-s3分别存储0-3对应数组s不同
{ 元素即四种不同的符号
for(n2=0;n24;n2++) 数组p用于存储可能输出内容
{ 数组p1用于临时存储p判断值是
if(n2==n1) 否24,因为figure函数会破坏p
continue; 因为i[n1]-i[n4]要代表不同数
for(n3=0;n34;n3++) 所以n1-n4相等即continue
{
if(n3==n2n3==n1)
continue;
for(n4=0;n44;n4++)
{
if(n4==n3n4==n2n4==n1)
continue;
for(s1=0;s14;s1++) s1-s3为穿插在4数中的3个符号
{
for(s2=0;s24;s2++) 以下1代表1-13的数
{ +代表+,-
for(s3=0;s34;s3++) 代表,
{
strcat(p,change(i[n1])); 此为1+1+1+1类型
strcat(p,s[s1]);
strcat(p,change(i[n2]));
strcat(p,s[s2]);
strcat(p,change(i[n3]));
strcat(p,s[s3]);
strcat(p,change(i[n4]));
strcpy(p1,p);
if(fabs(figure(p1)-24)=0.000001)
{
if(mode)
printf(%sn,p);
flag++;
return flag;
}
p='0';
if(s12==1&&(s22==0s32==0)) 此为1(1+1+1)类型
{
strcat(p,change(i[n1]));
strcat(p,s[s1]);
strcat(p,();
strcat(p,change(i[n2]));
strcat(p,s[s2]);
strcat(p,change(i[n3]));
strcat(p,s[s3]);
strcat(p,change(i[n4]));
strcat(p,));
strcpy(p1,p);
if(fabs(figure(p1)-24)=0.000001)
{
if(mode)
printf(%sn,p);
flag++;
return flag;
}
p='0';
}
if(s12==0&&s22==1) 此为(1+1)1+1类型
{
strcat(p,();
strcat(p,change(i[n1]));
strcat(p,s[s1]);
strcat(p,change(i[n2]));
strcat(p,));
strcat(p,s[s2]);
strcat(p,change(i[n3]));
strcat(p,s[s3]);
strcat(p,change(i[n4]));
strcpy(p1,p);
if(fabs(figure(p1)-24)=0.000001)
{
if(mode)
printf(%sn,p);
flag++;
return flag;

}
p='0';
}
if(s22==0&&s12==1) 此为1(1+1)+1类型
{
strcat(p,change(i[n1]));
strcat(p,s[s1]);
strcat(p,();
strcat(p,change(i[n2]));
strcat(p,s[s2]);
strcat(p,change(i[n3]));
strcat(p,));



作者: ·兲兲· 2006-10-10 2216 回复此发言

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

3 完美的24点运算与游戏程序
strcat(p,s[s3]);
strcat(p,change(i[n4]));
strcpy(p1,p);
if(fabs(figure(p1)-24)=0.000001)
{
if(mode)
printf(%sn,p);
flag++;
return flag;
}
p='0';
}
if((s12==0s22==0)&&s32==1) 此为(1+1+1)1类型
{
strcat(p,();
strcat(p,change(i[n1]));
strcat(p,s[s1]);
strcat(p,change(i[n2]));
strcat(p,s[s2]);
strcat(p,change(i[n3]));
strcat(p,));
strcat(p,s[s3]);
strcat(p,change(i[n4]));
strcpy(p1,p);
if(fabs(figure(p1)-24)=0.000001)
{
if(mode)
printf(%sn,p);
flag++;
return flag;
}
p='0';
}
if(s12==0&&s22==1&&s32==0) 此为(1+1)1+1类型
{
strcat(p,();
strcat(p,change(i[n1]));
strcat(p,s[s1]);
strcat(p,change(i[n2]));
strcat(p,));
strcat(p,s[s2]);
strcat(p,();
strcat(p,change(i[n3]));
strcat(p,s[s3]);
strcat(p,change(i[n4]));
strcat(p,));
strcpy(p1,p);
if(fabs(figure(p1)-24)=0.000001)
{
if(mode)
printf(%sn,p);
flag++;
return flag;
}
p='0';
} 以上几种类型可代表所有类型
} 不重不漏
}
}
}
}
}
}
if(mode)
printf(No answer!n);
return flag;
}

char change(int x) 将数值转化成字符型数字
{
static char a[64]; 存储字符数字
char c; 存储字符数字的首位
c=a+63;
c='0';
c--;
for(;;c--) 通过每次的除10取余
{ 将十进制数每位转化成字符
if(x=10)
{
c=x%10+'1'-1;
x=x10;
}
else
{
c=x+'1'-1;
break;
}
}
return?; 最后将字符数字的首位传出
}

double figure(char p) 此部分实现一计算器功能
{
int judge_sym(char sym); 判断是否是+,-,,
int judge(char p);
int judge2(char p);
void add(char p); 添加负数的括号
void pick(char p); 摘除表达式两侧括号
double recog(char p); 将字符型数转化为double型
char c=p,c1,c2[64];
int sign,kuoh=0,flag2=0;
double result,chu;
add(p);
for(sign=0;c!='0';c++) 判断表达式内是否还有符号
{
if(judge_sym(c)c=='('c==')')
{
sign++;
break;
}
}
if(sign==0) 没有符号,直接转化
return(recog(p));
else
{
c=p;
for(;c!='0';c++)
{
if(c=='(')
kuoh++;
if(c==')')
kuoh--;
if(!judge2?) 判断c后面是否有+,-
{ 有则做后面的
if(c=='+'&&kuoh==0)
{
c='0';
result=figure(p)+figure(c+1);
flag2++;
break;
}
if(c=='-'&&kuoh==0)
{
c='0';
result=figure(p)-figure(c+1);
flag2++;
break;
}
}
if(!judge?) 判断c后面是否有+,-,,
{ 有则做后面的
if(c==''&&kuoh==0)
{
c='0';
result=figure(p)figure(c+1);
flag2++;
break;
}
if(c==''&&kuoh==0)
{ 除法会溢出,注意!
c='0';
chu=figure(c+1);
if(chu==0)
result=99999;
else
result=figure(p)chu;
flag2++;
break;
}
} 解释一下为什么做后面的
} 例1-2-3就是分成1-2和3
if(flag2) 中间用-连接 就变成递归
return(result+0); 1-2和3 所以做后面的起
else
{
pick(p);
result=figure(p);
return(result+0);
}
}
}

int judge(char p) 判断括号外是否有符号
{ 有返回1,无返回0



作者: ·兲兲· 2006-10-10 2216 回复此发言

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

4 完美的24点运算与游戏程序
int judge_sym(char sym);
char c=p;
int kuoh=0,flag=0;
for(c++;c!='0';c++)
{
if(c=='(')
kuoh++;
if(c==')')
kuoh--;
if(kuoh==0&&judge_sym(c))
{
flag++;
break;
}
}
return(flag);
}

int judge2(char p) 判断括号外是否有+,-
{ 有返回1,无返回0
char c=p;
int kuoh=0,flag=0;
for(c++;c!='0';c++)
{
if(c=='(')
kuoh++;
if(c==')')
kuoh--;
if(kuoh==0&&(c=='+'c=='-'))
{
flag++;
break;
}
}
return(flag);
}

void add(char p) 这部分是给诸如-1+6-9这类式
{ 前面的-1添加()成(-1)+6-9
int judge_num(char num);便于理解优先级
int judge_sym(char sym);
char c=p,b[64];
int flag=0;
for(;c!='0';c++)
{
if((c=='-'c=='+')&&judge_num((c+1)))
flag++;
if((judge_num(c)c=='.')&&judge_sym((c+1)))
{
flag++;
break;
}
if((judge_num(c)c=='.')&&(c+1)==')')
break;
}
if(flag==2)
flag=1;
else
flag=0;
if(flag)
{
c=p;
for(;c!='0';c++)
{
if((c+1)='0'&&(c+1)='9')
{
if(c=='+'c=='-')
{
strcpy(b,c);
c='(';
strcpy(c+1,b);
}
break;
}
}
c+=2;
for(;c!='0';c++)
{
if((c'0'c'9')&&c!='.')
{
strcpy(b,c);
c=')';
strcpy(c+1,b);
break;
}
}
}
}

void pick(char p) 函数功能如果表达式两侧皆为括号
{ 例(1+1+1) 则将其两侧括号去除成1+1+1
char c=p;
if(c=='('&&(c+strlen?-1)==')')
{
strcpy(c,c+1);
(c+strlen?-1)='0';
}
}


double recog(char p) 函数功能与函数change的相反
{ 将字符数据转化成double型
int judge_num(char num);
char c=p;
int flag=0,number;
double quan,ans=0;
for(;;c++)
{
if(c=='.')
{
flag++;
number=c-p;
}
if(c!='.'&&!judge_num(c))
break;
}
if(flag==0)
{
for(quan=1,c--;c=p;c--,quan=10)
ans+=(c-'1'+1)quan;
}
else
{
for(c--,quan=pow(10,number-(c-p));c=p;c--)
{
if(c=='.')
continue;
else
{
ans+=(c-'1'+1)quan;
quan=10;
}
}
}
return(ans);
}

int exam(char p) 检查输入数字是否在1-13之间
{
int judge_num(char num);
double recog(char p);
char c=p;
int number=0;
for(;c!='0';c++)
{
if(!judge_num(c))
number++;
if(number)
break;
}
if(!number)
{
if(recog(p)13recog(p)0)
number++;
}
return(number);
}

void draw(int p) 画出纸牌等物
{
time_t t;
int n;
clrscr();
printf(Press quit to leave.);
srand((unsigned) time(&t));
for(n=0;n4;n++)
{
gotoxy(1+7n,3);
printf(xdaxc4xc4xc4xc4xbf);
gotoxy(1+7n,4);
printf(xb3%c xb3,rand()%4+3);
gotoxy(1+7n,5);
printf(xb3 xb3);
gotoxy(1+7n,6);
switch((p+n))
{
case 1
printf(xb3 Axb3);
break;
case 2case 3case 4case 5case 6case 7case 8case 9case 10
printf(xb3%4dxb3,(p+n));
break;
case 11
printf(xb3 Jxb3);
break;
case 12
printf(xb3 Qxb3);
break;
case 13
printf(xb3 Kxb3);
}

gotoxy(1+7n,7);
printf(xc0xc4xc4xc4xc4xd9);
}
gotoxy(TIMELEFTX-1,TIMELEFTY-2);



作者: ·兲兲· 2006-10-10 2216 回复此发言

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

5 完美的24点运算与游戏程序
printf(TIME);
gotoxy(TIMELEFTX-1,TIMELEFTY-1);
printf(LEFT);
gotoxy(TIMELEFTX,TIMELEFTY);
printf(60);
gotoxy(1,9);

}



int exam2(char p,int a,int b,int c,int d)
{ 检查输入的表达式中4数是否
int judge_num(char num); 与所求4数相同
double recog(char p);
int number=0,num[4],flag=0,n,m;
num[0]=a;
num[1]=b;
num[2]=c;
num[3]=d;
for(m=0;p!='0';p++,m++)
{
if(judge_num(p)&&!judge_num((p+1)))
number++;
if(m0&&p='0'&&p='9'&&judge_num((p-1)))
continue;
if(p='9'&&p='0')
{
if(recog(p)13recog(p)1)
{
flag++;
break;
}
else
{
for(n=0;n4;n++)
{
if(recog(p)==num[n])
{
num[n]=0;
break;
}
}
}
}
}
if(!flag)
{
if(number!=4)
flag++;
else
if(num[1]num[2]num[3]num[0])
flag++;
}
return(flag);
}

int check(char p)
{ 检查输入表达式格式是否正确
int judge_sym(char sym);涉及到方方面面
int kuoh=0,flag=0;
for(;p!='0';p++)
{
if(p==' ')
{
flag++;
break;
}
if(kuoh0)
{
flag++;
break;
}
if(p=='(')
kuoh++;
if(p==')')
kuoh--;
if(judge_sym(p)&&judge_sym((p+1)))
{
flag++;
break;
}
if(p=='('&&(!judge_num((p+1))&&(p+1)!='-'))
{
flag++;
break;
}
if(p==')'&&!judge_sym((p+1))&&(p+1)!='0')
{
flag++;
break;
}
}
if(!flag)
{
if(kuoh!=0)
flag++;
}
return(flag);
}

int getstring(char p)
{ 游戏模式中接受输入
int countdown(); 以及倒计时部分
int i=0,time=MAXTIME-1;
for(;;)
{
if(countdown())
{
if(!(time+1))
return 0;
gotoxy(TIMELEFTX,TIMELEFTY);
printf(%2d,time--);
}
gotoxy(i+1,9);
if(bioskey(1))
{
(p+i)=getch();
if(((p+i)=65&&(p+i)91(p+i)=97&&
(p+i)123judge_num((p+i)))&&
(p+i)!=0x48&&(p+i)!=0x4b&&(p+i)!=0x4d&&
(p+i)!=0x50(p+i)==8(p+i)==13
judge_sym((p+i))(p+i)=='('
(p+i)==')')
{
if((p+i)=='x8')
{
(p+i)=0;
if(i)
{
putchar('b');
putchar(' ');
putchar('b');
i--;
}
continue;
}
if((p+i)=='xd')
{
(p+i)='0';
printf(n);
return 1;
}
putch((p+i));
i++;
}
}
}
}

int countdown()
{
static long new, old;
new=biostime(0,0L);
if(!old)
old=new;
if(new-oldSECOND)
return 0;
else
{
old=new;
return 1;
}
}

int judge_num(char num)
{
if(num='0'&&num='9')
return 1;
else
return 0;
}

int judge_sym(char sym)
{
if(sym=='+'sym=='-'sym==''sym=='')
return 1;
else
return 0;
}

一个参考程序如下。程序涉及到一些底层库函数的调用和cpu内部寄存器的使用,需要有相当软硬件水准去理解。
编译环境:中文win-tc或tc3.0或borland c++
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
#include <bios.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>

#define BORDER 1
#define ESC 27
#define REV_VID 0x1e
#define NORM_VID 0x40

char *main_menu[] =
{
"F --- 文件管理",
"D --- 磁盘管理",
"H --- 打印服务",
"X --- 退出菜单",
};

char* sub_menu1[] =
{
"S --- 文件显示",
"P --- 文件打印",
"C --- 文件拷贝",
"D --- 文件删除",
"X --- 返回上级",
};

char* sub_menu2[] =
{
"B --- BOOT区备份",
"R --- BOOT区恢复",
"X --- 返回上级",
};

char* sub_menu3[] =
{
"O --- 打印图形",
"F --- 打印文本",
"X --- 返回上级",
};

void goto_xy(int x, int y) /*将光标移动到指定位置*/
{
union REGS regs;
regs.h.ah = 2;
regs.h.dl = x;
regs.h.dh = y;
regs.h.bh = 0;
int86( 0x10, ®s, ®s );
}

void save_video( int startx, int endx, int starty, int endy, unsigned int* buf_ptr )
/*将指定区域的视频模式存储到指定的内存中去*/
{
union REGS r;
register int i, j;
for( i = starty; i < endy; i++)
for( j = startx; j < endx; j++ )
{
goto_xy(j, i);
r.h.ah = 8;
r.h.bh = 0;
*buf_ptr++ = int86( 0x10, &r, &r );
putchar(' ');
}
}

void chineseputs( int x, int y, char *p, int attrib ) /*在指定的位置显示中文字符*/
{
union REGS r;
while(*p)
{
r.h.ah = 2;
r.h.dl = x++;
r.h.dh = y;
int86(0x10, &r, &r);
r.h.ah = 9;
r.h.bh = 0;
r.x.cx = 1;
r.h.al = *p++;
r.h.bl = attrib;
int86( 0x10, &r, &r );

}
}

void disp_box( int x1, int y1, int x2, int y2, int attrib) /*显示边框*/
{
unsigned char* boxchar[6] = {"┏","━","┓","┃","┗","┛"};
register int i;
for( i = x1; i <= x2; i++ )
{
chineseputs( i, y1, boxchar[1], attrib );
chineseputs( i, y2, boxchar[1], attrib );
}
for( i = y1; i <= y2; i++ )
{
chineseputs( x1, i, boxchar[3], attrib );
chineseputs( x2, i, boxchar[3], attrib );
}
chineseputs( x1, y1, boxchar[0], attrib );
chineseputs( x2, y1, boxchar[2], attrib );
chineseputs( x2, y2, boxchar[5], attrib );
chineseputs( x1, y2, boxchar[4], attrib );
}

void display_menu( char* menu[], int x, int y, int count ) /*显示菜单项*/
{
register int i;
for( i = 0; i < count; i++, x++)
{
goto_xy( x, y );
cprintf( menu[i]);
}
}

int is_in( char* s, char c) /*返回字符串中热键的位置*/
{
register int i;
for( i = 0; *s; i++ )
if( *s++ == c ) return i + 1;
return 0;
}

int get_resp( int x, int y, int count, char* menu[], char* keys ) /*获得用户的响应*/
{
union inkey
{
char ch[2];
int i ;
} c ;
int arrow_choice = 0, key_choice;
y++;
goto_xy(x, y);
chineseputs( y, x, menu[0], REV_VID);
for(;;)
{
while(!bioskey(1));
c.i = bioskey(0);
goto_xy( x + arrow_choice, y);
chineseputs( y, x+arrow_choice, menu[arrow_choice], NORM_VID );
if( c.ch[0] )
{
key_choice = is_in( keys, tolower( c.ch[0] ));
if( key_choice ) return key_choice - 1;
switch( c.ch[0] )
{
case '\r': return arrow_choice;
case ' ': arrow_choice++;
break;
case ESC : return -1;
}
}
else
{
switch( c.ch[1] )
{
case 72: arrow_choice--;
break;
case 80: arrow_choice++;
break;
}
}
if( arrow_choice == count ) arrow_choice = 0;
if( arrow_choice < 0 ) arrow_choice = count - 1;
goto_xy( x + arrow_choice, y );
chineseputs( y, x+arrow_choice, menu[ arrow_choice ], REV_VID );
}
}

void restore_video( int startx, int endx, int starty, int endy, unsigned char* buf_ptr )
/*恢复原有的视频方式*/
{
union REGS r;
register int i, j;
for( j = startx; j < endx; j++)
for( j = starty; j < endy; j++ )
{
goto_xy(i, j);
r.h.ah = 9;
r.h.bh = 0;
r.x.cx = 1;
r.h.al = *buf_ptr++;
r.h.bl = *buf_ptr++;
int86( 0x10, &r, &r );
}
}

int popup( char* menu[], char* keys, int count, int x, int y, int border )
/*弹出式菜单的显示*/
{
register int i, len;
int endx, endy, choice;
unsigned int *p;
if((x>24)||(x<0)||(y>79)||(y<0))
{
printf("范围错");
return -2;
}
len = 0;
for( i = 0; i < count; i++ )
if( strlen( menu[i]) > len ) len = strlen( menu[i] );
endy = len + 2 + y;
endx = count + 1 + x;
if((endx+1>24)||(endy+1>79))
{
printf("菜单不匹配");
return -2;
}
p = (unsigned int *) malloc((endx-x+1)*(endy-y+1));
if( !p ) exit(1);
save_video( x, endx + 1, y, endy+1, p );
if( border ) disp_box( y, x, endy, endx, YELLOW );
display_menu( menu, x + 1, y + 1, count );
choice = get_resp( x + 1, y, count, menu, keys );
restore_video( x, endx + 1, y, endy + 2, (unsigned char* ) p);
free( p );
return choice;
}

int main()
{
int i, j;
directvideo = 0;
for(;;)
{
clrscr();
goto_xy(0, 0);
textcolor( BLACK );
textbackground( RED );
switch( popup( main_menu, "fdhx", 4,5, 16, BORDER ))
{
case 0:
clrscr();
switch( popup( sub_menu1, "spcdx", 5, 5, 16, BORDER ))
{
case 0:
clrscr();
goto_xy( 24, 20 );
cprintf("你选择了文件显示功能");
getch();
break;
case 1:
clrscr();
goto_xy( 24, 20 );
cprintf("你选择了文件打印功能");
getch();
break;
case 2:
clrscr();
goto_xy( 24, 20 );
cprintf("你选择了文件拷贝功能");
getch();
break;
case 3:
clrscr();
goto_xy(24,20);
cprintf("你选择了文件删除功能");
getch();
break;
case 4:
break;
default:
break;
}
break;
case 1:
clrscr();
switch( popup( sub_menu2, "brx", 3, 5, 16, BORDER ))
{
case 0:
clrscr();
goto_xy(24,20);
cprintf("你选择了BOOT区备份功能");
getch();
break;
case 1:
clrscr();
goto_xy(24,20);
cprintf("你选择了BOOT区恢复功能");
getch();
break;
case 2:
break;
default:
break;
}
break;
case 2:
clrscr();
switch( popup( sub_menu3, "of", 3, 5, 16, BORDER ))
{
case 0:
clrscr();
goto_xy( 24, 20 );
cprintf("你选择了打印图形功能");
getch();
break;
case 1:
clrscr();
goto_xy(24,20);
cprintf("你选择了打印文本功能");
getch();
break;
case 2:
break;
default:
break;
}
break;
case 3:
case -1:
return 0;
default:
break;
}
}

return 0;
}

那就是你的不是啰。要用vc可以到vc++板块提问,vb/vc调用几个控件就完事了。我原以为你是要用c写出代码。

用可视化编程,现在哪还有用代码裸写图形界面的

用MFC的话应该很容易吧

我给你个建议:直接用资源编辑器,编辑一个3级菜单。用VC++把它显示出来,一切OK!


用c或c++编写一个多级菜单。至少三级。视频

相关评论:

相关主题精彩

版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

Copyright © 喜物网