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

📄 keymenu.h

📁 一个数据结构的大作业
💻 H
字号:
#ifndef KEYMENU_H
#define KEYMENU_H

#include <graphics.h>
#include <stdlib.h>
//#include "c:\MyTele\MyCCode\Common.h"
#include "e:\Progra~1\MyCCode\Common.h"
#include "e:\Progra~1\MyCCode\Frame.h"
#include "e:\Progra~1\MyCCode\List.h"

extern int KeyboardMessage[2];
extern TRAIN *MainHead;
char *Menugroup1[]={
		    "New",
		    "Open...",
		    "Save",
		    "Save as...",
		    "Exit"
		   };
char *Menugroup2[]={
		    "Add Item",
		    "Delete Item",
		    "Modify...",
		    "Sort by begin"
		   };
char *Menugroup3[]={
		    "By Number",
		    "By Begin",
		    "By Type",
		    "By A to B"
		   };
char *Menugroup4[]={"About..."};
char *Title[]={
	       "File",
	       "Edit",
	       "Find",
	       "Help"
	      };
Rect MenuRect[]={
		 {5,15,40,25},//0 File
		 {55,15,90,25},//1 Edit
		 {105,15,140,25},//2 Find
		 {155,15,190,25},//3 Help
		 {5,27,110,97},//4 group1
		 {55,27,184,84},//5 group2
		 {105,27,210,84},//6 group3
		 {155,27,240,46}//7 group4
		};
void *pImage=NULL;
/////////////////////////////////////////////////////
void DrawTitle(int x1,int y1,int x2,int y2,
	       int color,int textcolor,
	       int whichselect);
void SaveUnderMenu(int Index);//0,1
void DrawMenu(int Index,      //0,1
	      //int x1,int y1,int x2,int y2,
	      int color,int textcolor,
	      int whichselect);
void DestoryMenu(int Index);
int  MenuFunction();
void OperateID(int MenuID);
//////////////////////////////////////////////////////
int MenuFunction()
{
 int Open=0;
 int NowGroup=0;
 int NowItem=0;
 int FinalValue=0;
 DrawTitle(0,13,639,28,FRAME_COLOR,MENUTEXT_COLOR,0);
 while(KeyboardMessage[1]!=CTRL_KEY_ESC)
 {
  PostKeybrdMessage();
  switch(KeyboardMessage[1])
  {
   case CTRL_KEY_LEFT:
	{
	 if(!Open)
	 {
	  if(NowGroup<1) NowGroup=3;
	  else NowGroup--;
	  DrawTitle(0,13,639,28,FRAME_COLOR,MENUTEXT_COLOR,NowGroup);
	 }
	 else
	 {
	  DestoryMenu(NowGroup);
	  if(NowGroup<1) NowGroup=3;
	  else NowGroup--;
	  DrawTitle(0,13,639,28,FRAME_COLOR,MENUTEXT_COLOR,NowGroup);
	  NowItem=0;
	  SaveUnderMenu(NowGroup);
	  DrawMenu(NowGroup,FRAME_COLOR,MENUTEXT_COLOR,NowItem);
	 }
	 break;
	}
   case CTRL_KEY_RIGHT:
	{
	 if(!Open)
	 {
	  if(NowGroup>2) NowGroup=0;
	  else NowGroup++;
	  DrawTitle(0,13,639,28,FRAME_COLOR,MENUTEXT_COLOR,NowGroup);
	 }
	 else
	 {
	  DestoryMenu(NowGroup);
	  if(NowGroup>2) NowGroup=0;
	  else NowGroup++;
	  DrawTitle(0,13,639,28,FRAME_COLOR,MENUTEXT_COLOR,NowGroup);
	  NowItem=0;
	  SaveUnderMenu(NowGroup);
	  DrawMenu(NowGroup,FRAME_COLOR,MENUTEXT_COLOR,NowItem);
	 }
	 break;
	}
   case CTRL_KEY_DOWN:
	{
	 if(!Open)
	 {
	  Open=1;
	  SaveUnderMenu(NowGroup);
	  DrawMenu(NowGroup,FRAME_COLOR,MENUTEXT_COLOR,NowItem);
	 }
	 else
	 {
	  switch(NowGroup)
	  {
	   case 0:if(NowItem>3) NowItem=0;
		  else NowItem++;
		  break;
	   case 1:if(NowItem>2) NowItem=0;
		  else NowItem++;
		  break;
	   case 2:if(NowItem>2) NowItem=0;
		  else NowItem++;
		  break;
	   case 3:NowItem=0;
		  break;
	  }
	  DrawMenu(NowGroup,FRAME_COLOR,MENUTEXT_COLOR,NowItem);
	 }
	 break;
	}
   case CTRL_KEY_UP:
	{
	 if(Open)
	 {
	  switch(NowGroup)
	  {
	   case 0:if(NowItem<1) NowItem=4;
		  else NowItem--;
		  break;
	   case 1:if(NowItem<1) NowItem=3;
		  else NowItem--;
		  break;
	   case 2:if(NowItem<1) NowItem=3;
		  else NowItem--;
		  break;
	   case 3:NowItem=0;
		  break;
	  }
	  DrawMenu(NowGroup,FRAME_COLOR,MENUTEXT_COLOR,NowItem);
	 }
	 break;
	}
   case CTRL_KEY_ENTER:
	{
	 if(!Open)
	 {
	  Open=1;
	  SaveUnderMenu(NowGroup);
	  DrawMenu(NowGroup,FRAME_COLOR,MENUTEXT_COLOR,NowItem);
	 }
	 else
	 {
	  FinalValue=(NowGroup+1)*10+NowItem+1;
	  DestoryMenu(NowGroup);
	  DrawTitle(0,13,639,28,FRAME_COLOR,MENUTEXT_COLOR,8);//clear
	  return FinalValue;
	 }
	 break;
	}
  }
 }
 if(Open)
   DestoryMenu(NowGroup);
 DrawTitle(0,13,639,28,FRAME_COLOR,MENUTEXT_COLOR,8);//clear
 return 0;
}
void OperateID(int MenuID)
{
 switch(MenuID)
 {
  case 0 :{return;}
  ////////////////////File//////////////////////////////
  case 11:{//File New
	   New(0);
	   break;
	  }
  case 12:{//File Open...
	   LoadBox();
	   break;
	  }
  case 13:{//File Save
	   Save();
	   break;
	  }
  case 14:{//File SaveAs...
	   SaveAsBox();
	   break;
	  }
  case 15:{//File Exit
	   Exit();
	   //break;
	  }
  ////////////////////Edit///////////////////////////////
  case 21:{//Edit AddItem
	   AddItem();
	   break;
	  }
  case 22:{//Edit Delete Item
	   Delete();
	   break;
	  }
  case 23:{//Edit Modify...
	   Modify();
	   break;
	  }
  case 24:{//Edit SortByBegin
	   break;
	  }
  ////////////////////Find////////////////////////////////
  case 31:{//Find ByNumber
	   FindByNumber();
	   break;
	  }
  case 32:{//Find ByBegin
	   FindByBegin();
	   break;
	  }
  case 33:{//Find ByType
	   FindByType();
	   break;
	  }
  case 34:{//Find ByAtoB
	   FindByATB();
	   break;
	  }
  //////////////////Help//////////////////////////////////////
  case 41:{//HelpAbout
	   AboutBox();
	   break;
	  }
 }
}
void DrawTitle(int x1,int y1,int x2,int y2,
	       int color,int textcolor,
	       int whichselect)
{
 int i;
 int MenuX=MenuRect[0].left+2;
 int MenuY=MenuRect[0].top+3;
 //setviewport(x1,y1,x2,y2,1);
 DrawBox(x1,y1,x2,y2,color);
 for(i=0;i<4;i++)
 {
  MenuX=MenuRect[i].left+2;
  MenuY=MenuRect[i].top+2;
  setcolor(textcolor);
  if(i==whichselect)
  {
   //setfillstyle(SOLID_FILL,1);
   //bar(MenuRect[i].left,MenuRect[i].top,
   //    MenuRect[i].right,MenuRect[i].bottom);
   DrawEdgeTwo(MenuRect[i].left,MenuRect[i].top,
	       MenuRect[i].right,MenuRect[i].bottom);
   setcolor(MENUTEXT_COLORSEL);
   outtextxy(MenuX,MenuY,Title[i]);
  }
  outtextxy(MenuX,MenuY,Title[i]);
 }
 //RestoreViewport();
}
void DrawMenu(int Index,
	      //int x1,int y1,int x2,int y2,
	      int color,int textcolor,
	      int whichselect)
{
 int i;
 int textx,texty;

 switch(Index)
 {
  case 0:
       {
	//setviewport(MenuRect[2].left,MenuRect[2].top,
	//	    MenuRect[2].right,MenuRect[2].bottom,1);
	DrawBox(MenuRect[4].left,
		MenuRect[4].top,
		MenuRect[4].right,
		MenuRect[4].bottom,color);
	textx=MenuRect[4].left+10;
	texty=MenuRect[4].top+5;
	for(i=0;i<5;i++)
	{
	 setcolor(textcolor);
	 if(i==whichselect)
	 {
	  /*setfillstyle(SOLID_FILL,1);
	  bar(MenuRect[3].left+2,texty-3,
	      MenuRect[3].right-2,texty+10);*/
	  DrawEdgeOne(MenuRect[4].left+2,texty-3,
		      MenuRect[4].right-2,texty+10);
	  setcolor(MENUTEXT_COLORSEL);
	  outtextxy(textx,texty,Menugroup1[i]);
	 }
	 outtextxy(textx,texty,Menugroup1[i]);
	 texty+=13;
	}
	break;
       }
  case 1:
       {
	//setviewport(MenuRect[3].left,MenuRect[3].top,
	//	    MenuRect[3].right,MenuRect[3].bottom,1);
	DrawBox(MenuRect[5].left,
		MenuRect[5].top,
		MenuRect[5].right,
		MenuRect[5].bottom,color);
	textx=MenuRect[5].left+10;
	texty=MenuRect[5].top+5;
	for(i=0;i<4;i++)
	{
	 setcolor(textcolor);
	 if(i==whichselect)
	 {
	  /*setfillstyle(SOLID_FILL,1);
	  bar(MenuRect[4].left+2,texty-3,
	      MenuRect[4].right-2,texty+10);*/
	  DrawEdgeOne(MenuRect[5].left+2,texty-3,
		      MenuRect[5].right-2,texty+10);
	  setcolor(MENUTEXT_COLORSEL);
	  outtextxy(textx,texty,Menugroup2[i]);
	 }
	 outtextxy(textx,texty,Menugroup2[i]);
	 texty+=13;
	}
	break;
       }
  case 2:
       {
	//setviewport(MenuRect[3].left,MenuRect[3].top,
	//	    MenuRect[3].right,MenuRect[3].bottom,1);
	DrawBox(MenuRect[6].left,
		MenuRect[6].top,
		MenuRect[6].right,
		MenuRect[6].bottom,color);
	textx=MenuRect[6].left+10;
	texty=MenuRect[6].top+5;
	for(i=0;i<4;i++)
	{
	 setcolor(textcolor);
	 if(i==whichselect)
	 {
	  /*setfillstyle(SOLID_FILL,1);
	  bar(MenuRect[5].left+2,texty-3,
	      MenuRect[5].right-2,texty+10);*/
	  DrawEdgeOne(MenuRect[6].left+2,texty-3,
		      MenuRect[6].right-2,texty+10);
	  setcolor(MENUTEXT_COLORSEL);
	  outtextxy(textx,texty,Menugroup3[i]);
	 }
	 outtextxy(textx,texty,Menugroup3[i]);
	 texty+=13;
	}
	break;
       }
  case 3:
       {
	//setviewport(MenuRect[3].left,MenuRect[3].top,
	//	    MenuRect[3].right,MenuRect[3].bottom,1);
	DrawBox(MenuRect[7].left,
		MenuRect[7].top,
		MenuRect[7].right,
		MenuRect[7].bottom,color);
	textx=MenuRect[7].left+10;
	texty=MenuRect[7].top+5;
	for(i=0;i<1;i++)
	{
	 setcolor(textcolor);
	 if(i==whichselect)
	 {
	  /*setfillstyle(SOLID_FILL,1);
	  bar(MenuRect[5].left+2,texty-3,
	      MenuRect[5].right-2,texty+10);*/
	  DrawEdgeOne(MenuRect[7].left+2,texty-3,
		      MenuRect[7].right-2,texty+10);
	  setcolor(MENUTEXT_COLORSEL);
	  outtextxy(textx,texty,Menugroup4[i]);
	 }
	 outtextxy(textx,texty,Menugroup4[i]);
	 texty+=13;
	}
	break;
       }
 }
 RestoreViewport();
}
void DestoryMenu(int Index)
{
 if(pImage!=NULL)
 {
  switch(Index)
  {
   case 0: putimage(MenuRect[4].left,MenuRect[4].top,pImage,COPY_PUT);
	   break;
   case 1: putimage(MenuRect[5].left,MenuRect[5].top,pImage,COPY_PUT);
	   break;
   case 2: putimage(MenuRect[6].left,MenuRect[6].top,pImage,COPY_PUT);
	   break;
   case 3: putimage(MenuRect[7].left,MenuRect[7].top,pImage,COPY_PUT);
	   break;
  }
  free(pImage);
 }
}
void SaveUnderMenu(int Index)
{
 unsigned int size;
 switch(Index)
 {
  case 0:
       {
	size=imagesize(MenuRect[4].left,
		       MenuRect[4].top,
		       MenuRect[4].right,
		       MenuRect[4].bottom);
	pImage=malloc(size);
	getimage(MenuRect[4].left,
		 MenuRect[4].top,
		 MenuRect[4].right,
		 MenuRect[4].bottom,
		 pImage);
	break;
       }
  case 1:
       {
	size=imagesize(MenuRect[5].left,
		       MenuRect[5].top,
		       MenuRect[5].right,
		       MenuRect[5].bottom);
	pImage=malloc(size);
	getimage(MenuRect[5].left,
		 MenuRect[5].top,
		 MenuRect[5].right,
		 MenuRect[5].bottom,
		 pImage);
	break;
       }
  case 2:
       {
	size=imagesize(MenuRect[6].left,
		       MenuRect[6].top,
		       MenuRect[6].right,
		       MenuRect[6].bottom);
	pImage=malloc(size);
	getimage(MenuRect[6].left,
		 MenuRect[6].top,
		 MenuRect[6].right,
		 MenuRect[6].bottom,
		 pImage);
	break;
       }
  case 3:
       {
	size=imagesize(MenuRect[7].left,
		       MenuRect[7].top,
		       MenuRect[7].right,
		       MenuRect[7].bottom);
	pImage=malloc(size);
	getimage(MenuRect[7].left,
		 MenuRect[7].top,
		 MenuRect[7].right,
		 MenuRect[7].bottom,
		 pImage);
	break;
       }
 }
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -