📄 menu.c
字号:
int Mainmenu()
{ /* 主窗口*/
int addr[4]={3,11,19,29},i,j=32;
char *menu[10]={" GaoJie "," WangYu "," DongLi "," About "};
char Path[60];
Nomouse();
parten=P[0];
window(1,1,80,25);
textbackground(7);
clrscr();
textcolor(0);
for(i=0;i<4;i++)
{ /* 显示头菜单*/
gotoxy(addr[i],1);
cprintf("%s",menu[i]);
}
textcolor(4); /* 高亮菜单首字母*/
gotoxy(addr[0]+1,1);
cprintf("G");
gotoxy(addr[1]+1,1);
cprintf("W");
gotoxy(addr[2]+1,1);
cprintf("D");
gotoxy(addr[3]+1,1);
cprintf("A");
textcolor(14);
gotoxy(75,1);
cprintf("-");
gotoxy(77,1);
cprintf("X");
window(2,2,79,24);/* 主界面背景*/
textbackground(0);
clrscr();
textcolor(parten.LINE_COLOR);
window(2,2,79,25);/*Box(1,1,78,23);*/
/* 信息提示框*/
window(8,3,64,24);
textcolor(14);
cprintf("\r\n Demo Of OS\r\n\n");
textcolor(12);
cprintf("1) ");
textcolor(2);
cprintf("Check This To Demo Of File system.\r\n\n");
textcolor(12);
cprintf("2) ");
textcolor(2);
cprintf("Check This To Demo Of shebei system.\r\n\n");
textcolor(12);
cprintf("3) ");
textcolor(2);
cprintf("Check This To Demo Of Cunchu system.\r\n\n");
textcolor(12);
cprintf("4) ");
textcolor(2);
cprintf("Check This To Demo Of zuoye system.\r\n\n");
textcolor(12);
cprintf("5) ");
textcolor(2);
cprintf("Check This To Demo Of jincheng system.\r\n\n");
textcolor(12);
cprintf("6) ");
textcolor(2);
cprintf("Ver.\r\n\n");
textcolor(12);
cprintf("7) ");
textcolor(2);
cprintf("Help.\r\n\n");
textcolor(12);
cprintf("8) ");
textcolor(2);
cprintf("Author.\r\n\n");
textcolor(12);
cprintf("9) ");
textcolor(2);
cprintf("Exit. ");/* 信息提示框*/
window(42,13,77,23);
textbackground(1);
textcolor(15);
clrscr();
window(43,14,76,22);
textbackground(parten.NOTICE_BK_COLOR);
textcolor(15);
clrscr();
cprintf("\r\n HELP INFORMATION \r\n");
textcolor(6);
cprintf("%c \r\n",j);
cprintf("%c MadeBy: Gaojie \r\n",j);
cprintf("%c QQ : 909861843 \r\n",j);
cprintf("%c E-mail: h912223@163.com \r\n",j);
cprintf("%c MadeIn: N10#314 \r\n",j);
cprintf("%c -- 2009.02.23 \r\n",j);
cprintf("%c ",j);
Showmouse();
}
int menu(STU STU_head,BSTree T,int *Menu_open,int *order,int msz)
{ /* 对菜单操作*/
int addr[4]={3,11,19,29}; /* 菜单的位置*/
int i,j;
int high[5]={5,5,5,5,14};
char *MENU[4] ={" Gaojie"," WangYu"," DongLi"," About "};/* 菜单名称*/
char *menu[12]={"File Ctrl+O","Exit Alt+X","2009-3-20 ",
"Shebei Ctrl+A","Cunchu Ctrl+C","2009-2-17",
"zuoye ","jincheng","2009-3-5 ",
"Ver Alt+V","Help Alt+H","Author: XQL"
};
static char Mback[18*7*2]; /* 用来保存被覆盖的区域*/
static char mback[18*2],MBACK[10*2];
static int m=0,M=-1,old_i=-1;
window(1,1,80,25);
if(!*Menu_open)
{ /* 如果菜单没有被点开*/
for(i=0;i<4;i++)
if(old_i==i&&!Msinbox(addr[i]*8-8,0,(addr[i]+strlen(MENU[i]))*8-2,8))
{ /* 还原被覆盖的区域*/
puttext(addr[i],1,addr[i]+strlen(MENU[i]),1,MBACK);
old_i=-1;
}
for(i=0;i<4;i++) /* 鼠标放在菜单上就高亮*/
if(old_i!=i&&Msinbox(addr[i]*8-8,0,(addr[i]+strlen(MENU[i]))*8-2,8))
{ /* 高亮*/
gettext(addr[i],1,addr[i]+strlen(MENU[i]),1,MBACK);
textbackground(parten.HIGH_LIGHT_COLOR);
textcolor(15);
gotoxy(addr[i],1);
cprintf("%s\b",MENU[i]);
old_i=i;
}
if(msz==1&&*order==-1)
{ /* 鼠标选中菜单*/
for(i=0;i<4;i++)
if(Msinbox(addr[i]*8,0,(addr[i]+strlen(MENU[i])-1)*8,8))
{ M=i;
*order=-2;
puttext(addr[M],1,addr[M]+strlen(MENU[M]),1,MBACK);
break;
}
}
switch(*order)
{ /* 接收按键*/
case File: M=0;break;
case Edit: M=1;break;
case Lookup: M=2;break;
case About: M=3;break;
case 6159 : Mainmenu(); break; /* 快捷键处理*/
case 7955 : Mainmenu();break; /* Alt+S*/
case Alt_X: Exit();
case 7681 : Mainmenu(); break;/* Ctrl+A*/
case 11779: break;/* Ctrl+C*/
case 8196 : Mainmenu(); break;/* Ctrl+D*/
case 7936 : Mainmenu();break;/* Ctrl+S*/
case 12032: /* Ctrl+V*/
case 12054: break; /* Alt+V*/
case 8960 : /* Ctrl+H*/
case 8968 : Help(); break; /* Alt+H*/
case -2 : break;/* 鼠标单击菜单时*/
default : if(msz==1&&Msinbox(608,0,618,10)||*order==ESC)
Exit(); /* 退出*/
return 0;
}
if(M>=0&&M<4) /* 如果是选中了这4个菜单中的一个*/
{
NewMenu: gettext(addr[M],1,addr[M]+strlen(MENU[M]),1,MBACK);
textbackground(parten.HIGH_LIGHT_COLOR);
m=0;/* 注意,重新画了菜单,要默认选中第一个*/
gotoxy(addr[M],1);
textcolor(WHITE);
cprintf("%s",MENU[M]);/* 显示选中的首菜单*/
gettext(addr[M],2,addr[M]+17,3+high[M],Mback);/*保存整个菜单覆盖的区域*/
window(addr[M]+2,3,addr[M]+17,3+high[M]);
textbackground(BLACK);clrscr();
window(addr[M],2,addr[M]+15,2+high[M]);
textbackground(parten.RANGE_COLOR);clrscr();
textcolor(BLACK);
window(addr[M],2,addr[M]+15,2+high[M]); /* 避免光标下移*/
/*Box(1,1,16,high[M]);*/ /* 画框*/
Box(addr[M],2,addr[M]+15,2+high[M],parten.RANGE_COLOR+4,parten.HIGH_LIGHT_COLOR+3);
for(i=0;i<3;i++)
{ /* 显示整个菜单*/
gotoxy(2,i+2);
cprintf("%-14s",menu[M*3+i]);
}
textcolor(WHITE);
gotoxy(2,5);
switch(M)
{ case 0: cprintf(" Gaojie"); break;
case 1: cprintf(" QQ:909861843"); break;
case 2: cprintf("Group:********");break;
case 3: cprintf(" 2009.02.23"); break;
}
window(1,1,80,25);
gettext(addr[M],3,addr[M]+16,3,mback);
textbackground(parten.HIGH_LIGHT_COLOR);/* 默认选中第一个*/
textcolor(WHITE);
gotoxy(addr[M]+1,3);
cprintf("%-14s",menu[M*3]);
*Menu_open=1;
return OK;
}
}/*if(!*Menu_open)*/
if(*Menu_open)
{
window(1,1,80,25);
if(*order==-1)
{
for(i=0;i<3;i++)
{
if( Msinbox((addr[M]+1)*8,(i+2)*8,(addr[M]+14)*8,(i+3)*8) )
{
if(i!=m)
{ /* 鼠标上下移*/
*order=-3; break;
}
if(msz==1) goto make_sure;/* 子菜单上点击了鼠标右键*/
}
}
if( msz==2 || ( msz==1&&!Msinbox(addr[M]*8,0,(addr[M]+14)*8,6*8) ) )
{ *order=ESC;goto make_sure;}
/****在菜单范围外,点击了鼠标,就覆盖菜单****/
for(j=0;j<4;j++)
if(j!=M&&Msinbox(addr[j]*8,0,(addr[j]+strlen(MENU[j]))*8,9))
{ *order=-4; break; } /* 鼠标左右移*/
}
switch(*order)
{
case -4: /* 上下左右键处理*/
case 3849 :/* Tab 键*/
case RIGHT: puttext(addr[M],2,addr[M]+17,3+high[M],Mback);
puttext(addr[M],1,addr[M]+strlen(MENU[M]),1,MBACK);
if(*order!=-4) M++;
else M=j;
if(M==4) M=0;
goto NewMenu;
case LEFT : puttext(addr[M],2,addr[M]+17,3+high[M],Mback);
puttext(addr[M],1,addr[M]+strlen(MENU[M]),1,MBACK);
M--; if(M==-1) M=3;
goto NewMenu;
case -3 :
case UP : puttext(addr[M],3+m,addr[M]+16,3+m,mback);
if(*order!=-3) m--;
else m=i;
if(m==-1) m=2; gotoxy(addr[M]+1,3+m);
gettext(addr[M],3+m,addr[M]+16,3+m,mback);
textbackground(parten.HIGH_LIGHT_COLOR); textcolor(WHITE);
cprintf("%-14s",menu[M*3+m]);
break;
case DOWN : puttext(addr[M],3+m,addr[M]+16,3+m,mback);
m++;
if(m==3) m=0; gotoxy(addr[M]+1,3+m);
gettext(addr[M],3+m,addr[M]+16,3+m,mback);
textbackground(parten.HIGH_LIGHT_COLOR); textcolor(WHITE);
cprintf("%-14s",menu[M*3+m]);
break;
case ENTER:
case ESC :
make_sure: puttext(addr[M],2,addr[M]+17,3+high[M],Mback);/* 整个菜单*/
puttext(addr[M],1,addr[M]+strlen(MENU[M]),1,MBACK);/* 菜单头*/
if(*order!=ESC)
switch(M*3+m)
{ /* 在高亮的菜单上点击了Enter 键*/
case 0: clrscr(); system("FILE"); break;
case 1: exit(0); break;
case 2: break;
case 3: break;
case 4: break;
case 5: break;
case 6: break;
case 7: break;
case 8: break;
case 9: Ver(); break;
case 10: Help(); break;
case 11: About_me();break;
}
if( (*order!=ESC) && (M*3+m<9) && (M*3+m!=2) ) Mainmenu();
m=0;old_i=-1;*Menu_open=0;*order=-1; /* '9'避免调用菜单里的函数后不能回到主界面*/
break;
}/*switch()*/
}/*if(*Menu_open)*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -