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

📄 menu.c

📁 操作系统的进程管理、设备管理、文件管理的动态演示(C版)
💻 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 + -