⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu2.c

📁 国内外搜集的GPS程序代码
💻 C
📖 第 1 页 / 共 2 页
字号:
 #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 + -