📄 menu2.c
字号:
#define ESC 0x001b
#define RETURN 0x000d
#define RIGHT 0x4d00
#define LEFT 0x4b00
#define UP 0x4800
#define DOWN 0x5000
#define F1 0x3b00
#define MenuInGround 1
#define MenuActiveGround 2
#define MenuActiveItem 3
#define MenuInItem 4
#define MenuEdge 5
#define WindowEdge 6
#define WindowGround 7
#define PopWindow 8
#define WindowMinX 1
#define WindowMinY 24
#define WindowMaxX 630
#define WindowMaxY 470
#include <graphics.h>
#include <alloc.h>
#include <process.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <dos.h>
#include <bios.h>
#include <conio.h>
#include <ctype.h>
unsigned char AllColors[20]={BROWN,7, GREEN,YELLOW, BLACK,WHITE,LIGHTCYAN, CYAN,LIGHTGREEN,9,10,11,12,13,14,15 };
#define INUM 10
typedef struct _menu
{
int coor[4], itemcoor[4*INUM], itemdispxy[2*INUM], COMMAND_ID[INUM];
char select, itemnum, * *itemname;
}MENUTYPE;
/*定义主菜单项及子菜单项*/
static char *MainMenuItem[]={"File","Edit","Setup","Run","View","Help",0};
static char *SubMenuItem1[]={"New","Open...","Save","Save as...","Exit",0};
static char *SubMenuItem2[]={" ",0};
static char *SubMenuItem3[]={"Start Time:" ,"End Time:" ,"Epoch Interval:","Cutangle:",0};
static char *SubMenuItem4[]={" ",0};
static char *SubMenuItem5[]={" ",0};
static char *SubMenuItem9[]={" ",0};
static char *SubMenuItem6[]={" ",0};
static char *SubMenuItem7[]={" ",0};
static char *SubMenuItem8[]={" ",0};
int Manage_Sub_Menu(void); /*控制子菜单项的动作*/
int Display_Sub_Menu(int ord); /*显示子菜单项的内容*/
int Exit_Program(char *Message); /*退出系统*/
int Get_Key(void); /*获取键盘键值*/
void Bar_3d(int x1,int y1,int x2,int y2,int thickness,int dis); /*绘制修饰条*/
void Get_Item_Count(char * *,int *,int *,int *); /*获取菜单中的项数*/
void Initial_Graphics(void); /*图形初始化*/
void Func_Proc(int ID); /**/
void Key_Select(int k); /*比较选择键值*/
void About(void); /*显示一关于显示框*/
void Message_Box(char *Message); /*显示信息框*/
void Good_Bye(char *pcInf1,char *pcInf2); /*退出信息框*/
void Load_Main_Menu(void); /*装载主菜单*/
void Load_Sub_Menu(char * *name, int ord); /*装载子菜单*/
void Exit_Menu(int); /*退出菜单*/
void In_Active_MainMenuItem(int select, char In_Active);/*激活主菜单*/
void In_Active_SubMenuItem(int ord,int select, char In_Active);/*激活子菜单*/
void Manage_Main_Menu(void); /*控制主菜单*/
void Display_Main_Menu(void); /*显示子菜单*/
MENUTYPE MainMenu,SubMenu[INUM]; /*定义为菜单类型*/
int maxx,texth,textw; /*定义窗口最大值、菜单文字的高及宽*/
void *MenuImageBuf; /**/
void main(void) /*主程序开始*/
{
Initial_Graphics();
maxx=getmaxx(); settextstyle(0,0,0);
texth=1.2*textheight("XHH"); textw=textwidth("X");
Load_Main_Menu();
Load_Sub_Menu(SubMenuItem1,0); Load_Sub_Menu(SubMenuItem2,1);
Load_Sub_Menu(SubMenuItem3,2); Load_Sub_Menu(SubMenuItem4,3);
Load_Sub_Menu(SubMenuItem5,4); Load_Sub_Menu(SubMenuItem6,5);
Load_Sub_Menu(SubMenuItem7,6); Load_Sub_Menu(SubMenuItem8,7);
Load_Sub_Menu(SubMenuItem9,8);
Manage_Main_Menu();
}
void Bar_3d(int x1,int y1,int x2,int y2,int thickness,int dis)
{
if(dis==1)
setfillstyle(SOLID_FILL,LIGHTGRAY);
else setfillstyle(1,7);
bar(x1,y1,x2,y2);
if (dis==1)setcolor(8);
else setcolor(WHITE);
line(x1,y1,x2,y1);
line(x1,y1,x1,y2);
line(x2-thickness,y1+thickness,x2-thickness,y2-thickness);
line(x1+thickness,y2-thickness,x2-thickness,y2-thickness);
if (dis==1)setcolor(WHITE);
else setcolor(8);
line(x1+thickness,y1+thickness,x2-thickness,y1+thickness);
line(x1+thickness,y1+thickness,x1+thickness,y2-thickness);
line(x1,y2,x2,y2);
line(x2,y1,x2,y2);
}
void Manage_Main_Menu(void)
{
unsigned key;
int ID;
Display_Main_Menu();
for(key=0; ; )
{
key=Get_Key();
switch(key)
{
case LEFT:
In_Active_MainMenuItem(MainMenu.select,0);
if(MainMenu.select<1)
MainMenu.select=MainMenu.itemnum-1;
else MainMenu.select--;
In_Active_MainMenuItem(MainMenu.select,1);
break;
case RIGHT:
In_Active_MainMenuItem(MainMenu.select,0);
if(MainMenu.select>MainMenu.itemnum-2)
MainMenu.select=0;
else MainMenu.select++;
In_Active_MainMenuItem(MainMenu.select,1);
break;
case DOWN:
case RETURN:
ID=Manage_Sub_Menu();
if (ID>=0)
Func_Proc(ID);
break;
}
}
}
void Func_Proc(int ID)
{
switch(ID)
{
case 4:
if (Exit_Program("Are you sure to exit?")==1)
break;
else
{
closegraph();
Good_Bye("Thanks you!","---------");
break;
}
case 801:
Message_Box("Here make Help file !!!");
break;
default:
About();
break;
}
}
int Manage_Sub_Menu(void)
{
MENUTYPE *mn=&SubMenu[MainMenu.select];
unsigned key;
if(Display_Sub_Menu(MainMenu.select))
return -2;
for(key=0;;)
{
key=Get_Key();
switch(key)
{
case ESC:
Exit_Menu(MainMenu.select);
return -1;
case UP:
In_Active_SubMenuItem(MainMenu.select,mn->select,0);
if(mn->select>0)
mn->select--;
else mn->select=mn->itemnum-1;
In_Active_SubMenuItem(MainMenu.select, mn->select,1);
break;
case DOWN:
In_Active_SubMenuItem(MainMenu.select,mn->select,0);
if(mn->select<mn->itemnum-1)
mn->select++;
else mn->select=0;
In_Active_SubMenuItem(MainMenu.select, mn->select,1);
break;
case LEFT:
Exit_Menu(MainMenu.select);
In_Active_MainMenuItem(MainMenu.select,0);
if(MainMenu.select<1)
MainMenu.select=MainMenu.itemnum-1;
else MainMenu.select--;
In_Active_MainMenuItem(MainMenu.select,1);
if(Display_Sub_Menu(MainMenu.select))
return -2;
mn=&SubMenu[MainMenu.select];
break;
case RIGHT:
Exit_Menu(MainMenu.select);
In_Active_MainMenuItem(MainMenu.select,0);
if(MainMenu.select>MainMenu.itemnum-2)
MainMenu.select=0;
else MainMenu.select++;
In_Active_MainMenuItem(MainMenu.select,1);
if(Display_Sub_Menu(MainMenu.select))
return -2;
mn=&SubMenu[MainMenu.select];
break;
case RETURN:
Exit_Menu(MainMenu.select);
return mn->COMMAND_ID[mn->select];
}
}
}
void Load_Main_Menu()
{
int count,totallen,maxlen,i,j=1;
MainMenu.coor[0]=0;
MainMenu.coor[1]=0;
MainMenu.coor[2]=maxx;
MainMenu.coor[3]=3*texth;
Get_Item_Count(MainMenuItem,&count,&totallen,&maxlen);
MainMenu.itemnum=count;
maxlen=(maxx/textw-totallen)/count;
for(i=0,j=0;i<count;i++)
{
MainMenu.itemcoor[i*4]=j*textw;
MainMenu.itemcoor[i*4+1]=MainMenu.coor[1];
MainMenu.itemcoor[i*4+2]=textw*(j+maxlen+strlen(MainMenuItem[i]));
MainMenu.itemcoor[i*4+3]=MainMenu.coor[3];
MainMenu.itemdispxy[i*2]=textw*(j+0.5*maxlen);
MainMenu.itemdispxy[i*2+1]=texth;
MainMenu.COMMAND_ID[i]=i;
j+=maxlen+strlen(MainMenuItem[i]);
}
MainMenu.itemname=MainMenuItem;
}
void Load_Sub_Menu(char * *name,int ord)
{
int count,i,j,maxlen;
Get_Item_Count(name,&count,&i,&maxlen);
SubMenu[ord].itemname=name;
SubMenu[ord].itemnum=count;
j=textw*(maxlen+2);
if(j+MainMenu.itemcoor[4*ord]<maxx)
{
SubMenu[ord].coor[0]=MainMenu.itemcoor[4*(ord)]+7;
SubMenu[ord].coor[2]=SubMenu[ord].coor[0]+j+6;
}
else
{
SubMenu[ord].coor[2]=maxx;
SubMenu[ord].coor[0]=SubMenu[ord].coor[2]-j;
}
SubMenu[ord].coor[1]=MainMenu.itemcoor[4*ord+3];
SubMenu[ord].coor[3]=SubMenu[ord].coor[1]+count*(texth+6)+5;
for(i=0;i<count;i++)
{
SubMenu[ord].itemcoor[i*4]=SubMenu[ord].coor[0];
SubMenu[ord].itemcoor[i*4+1]=SubMenu[ord].coor[1]+i*(6+texth)+2;
SubMenu[ord].itemcoor[i*4+2]=SubMenu[ord].coor[2];
SubMenu[ord].itemcoor[i*4+3]=SubMenu[ord].itemcoor[i*4+1]+texth+6+1;
SubMenu[ord].itemdispxy[i*2]=SubMenu[ord].itemcoor[i*4]+textw;
SubMenu[ord].itemdispxy[i*2+1]=SubMenu[ord].itemcoor[i*4+1]+3;
SubMenu[ord].COMMAND_ID[i]=ord*100+i;
}
}
void Display_Main_Menu(void)
{
unsigned i;
setcolor(CYAN);
setlinestyle(0,0,3);
setfillstyle(8, getmaxcolor());
setlinestyle(0,0,1);
setcolor(AllColors[MenuEdge]);
setfillstyle(SOLID_FILL,AllColors[MenuInGround]);
Bar_3d(MainMenu.coor[0],MainMenu.coor[1],MainMenu.coor[2],MainMenu.coor[3],1,1);
setcolor(AllColors[2]);
for(i=0;i<MainMenu.itemnum;i++)
{
if(MainMenu.select==i)
In_Active_MainMenuItem(i,1);
else setcolor(AllColors[MenuInItem]);
line(MainMenu.itemdispxy[i*2]-1,MainMenu.itemdispxy[i*2+1]+texth,MainMenu.itemdispxy [i*2] +textw,MainMenu.itemdispxy[i*2+1]+texth);
outtextxy((MainMenu.itemdispxy[i*2]),MainMenu.itemdispxy[i*2+1],MainMenu.itemname[i]);
}
}
int Display_Sub_Menu(int ord)
{
unsigned size,i;
MENUTYPE *mn=&SubMenu[ord];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -