




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言编写的菜单程序/* WIN-TC BGI 图形编程模板 */ #include Conio.h #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 #define closegr closegraph #define INSERT 0x5200 #define ESC 0x001B #define TAB 0x0F09 #define RETURN 0x000D #define RIGHT 0x4D00 #define LEFT 0x4B00 #define UP 0x4800 #define DOWN 0x5000 #define BS 0x0E08 #define HOME 0x4700 #define END 0x4F00 #define PGUP 0x4900 #define PGDN 0x5100 #define DEL 0x5300 #define F1 0x3B00 #define F2 0x3C00 #define F3 0x3D00 #define F4 0x3E00 #define F5 0x3F00 #define F6 0x4000 #define F7 0x4100 #define F8 0x4200 #define F9 0x4300 #define F10 0x4400 #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 INUM 10 /*定义子菜单项最多为10个*/ #define WindowMinX 1 #define WindowMinY 25 #define WindowMaxX 638 #define WindowMaxY 478 unsigned char AllColors20 = 0,CYAN,LIGHTRED,YELLOW,BLACK,WHITE,LIGHTRED,BLUE, CYAN,9,10,11,12,13,14,15;/*定义各种颜色*/ typedef struct int coor4; /*菜单的边框范围*/ int itemcoor4*INUM; /*菜单子菜单项的边框范围*/ int itemdispxy2*INUM; /*实际选中菜单的下划线位置*/ char select; /*菜单的编号*/ char itemnum; /*子菜单项的数目*/ char *itemname; /*子菜单项的名称指针*/ int COMMAND_IDINUM; /*与子菜单项所连的代号*/ MENUTYPE; static char *MainMenuItem = File,Menu1,Menu2,Menu3,Menu4, Quit,0;/*定制主菜单*/ static char *SubMenuItem1 = Item11,Item12.,Item13,Item14,Item15, Item16,Quit,0;/*以下定制子菜单1-6*/ static char *SubMenuItem2 = Item21.,Draw,Item23,Item24,Item25, Item26,Item27,Item28,0; static char *SubMenuItem3 = Item31.,Item32.,Item add., Item33,0; static char *SubMenuItem4 = Item41.,Item42.,Moveint text, Item44,Item45,Itime*,0; static char *SubMenuItem5 = Item51.,About.,Itme53,0; static char *SubMenuItem6 = 0; void getitemcount(char *,int *,int *,int *); /*说明程序中用的各子程序*/ void InitialGraphics(void); /*图形方式初始化*/ void LoadMainMenu(void); /*载入主菜单*/ void LoadSubMenu(char *name,int ord); /*载入子菜单*/ int ManageSubMenu(void); /*管理子菜单*/ void ManageMainMenu(void); /*管理主菜单*/ void DisplayMainMenu(void); /*显示主菜单*/ int DisplaySubMenu(int ord); /*显示子菜单*/ void Help_page_show(void)return; /*帮助函数(为空)*/ void Exitmenu(int); /*退出菜单函数*/ void In_ActiveMainMenuItem(int select,char In_Active); /*主菜单项激活函数*/ void In_ActiveSubMenuItem(int ord,int select,char In_Active); /*子菜单项激活函数*/ int GetKey(void); /*接收按键函数*/ void FuncProc(int ID); /*以下为菜单项对应的功能函数*/ void Draw(void); void MoveText(void); void About(void); void MessageBox(char *message); void GoodBye(char *pcInf1,char *pcInf2); MENUTYPE MainMenu,SubMenuINUM; /*定义主菜单和子菜单*/ int maxx,texth,textw; void *MenuImageBuf; void initgr(void) /* BGI初始化 */ int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */ registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */ initgraph(&gd, &gm, ); int main(void) initgr(); /* BGI初始化 */ /*此部分添加你自己的代码,例如 line(25, 25, 220, 220); circle(100, 100, 50); 等等*/ texth = textheight(text); maxx = getmaxx(); textw = textwidth(t); LoadMainMenu(); LoadSubMenu(SubMenuItem1,0); LoadSubMenu(SubMenuItem2,1); LoadSubMenu(SubMenuItem3,2); LoadSubMenu(SubMenuItem4,3); LoadSubMenu(SubMenuItem5,4); LoadSubMenu(SubMenuItem6,5); ManageMainMenu(); getch(); /* 暂停一下,看看前面绘图代码的运行结果 */ closegr(); /* 恢复TEXT屏幕模式 */ return 0; / void ManageMainMenu(void) /*主菜单管理函数*/ unsigned key; int ID; DisplayMainMenu(); /*显示主菜单*/ for(key=0;) key = GetKey(); switch(key) /*根据按键值决定程序走向*/ case LEFT: /*按下左键*/ In_ActiveMainMenuItem(MainMenu.select,0); if(MainMenu.selectMainMenu.itemnum-2) MainMenu.select = 0; else MainMenu.select+; In_ActiveMainMenuItem(MainMenu.select,1); break; case DOWN: /*按下下键*/ case RETURN: /*按下回车键*/ switch(MainMenu.COMMAND_IDMainMenu.select) case 5: /*如果是主菜单5(Quit),则退出*/ if(key=DOWN) break; closegraph(); GoodBye(GoodBye from,the Menu Demo in graphics mode); break; default: ID = ManageSubMenu(); if(ID=0) FuncProc(ID); break; / void FuncProc(int ID) switch(ID) case 6: closegraph(); GoodBye(goodbye from,the Menu Demo in graphics mode); break; case 101: Draw(); break; case 302: MoveText(); break; case 401: About(); break; default: setfillstyle(SOLID_FILL,AllColorsWindowGround); bar(WindowMinX,WindowMinY,WindowMaxX,WindowMaxY); MessageBox(This is an example!); break; / int ManageSubMenu(void) /*子菜单管理函数*/ MENUTYPE *mn = &SubMenuMainMenu.select; unsigned key; if(DisplaySubMenu(MainMenu.select) return -2; for(key=0;) /*根据不同的按键在下柆框内选择菜单项*/ key = GetKey(); switch(key) case ESC: /*取消键*/ Exitmenu(MainMenu.select); return -1; case UP: /*上键*/ In_ActiveSubMenuItem(MainMenu.select,mn-select,0); if(mn-select0) mn-select-; else mn-select = mn-itemnum-1; In_ActiveSubMenuItem(MainMenu.select,mn-select,1); break; case DOWN: /*下键*/ In_ActiveSubMenuItem(MainMenu.select,mn-select,0); if(mn-selectitemnum-1) mn-select+; else mn-select = 0; In_ActiveSubMenuItem(MainMenu.select,mn-select,1); break; case LEFT: Exitmenu(MainMenu.select); In_ActiveMainMenuItem(MainMenu.select,0); if(MainMenu.selectMainMenu.itemnum-2) MainMenu.select = 0; else MainMenu.select+; In_ActiveMainMenuItem(MainMenu.select,1); if(DisplaySubMenu(MainMenu.select) return -2; mn = &SubMenuMainMenu.select; break; case RETURN: Exitmenu(MainMenu.select); return mn-COMMAND_IDmn-select; / void LoadMainMenu(void) int count,totallen,maxlen,i,j = 1; MainMenu.coor0 = 0; MainMenu.coor1 = 0; MainMenu.coor2 = maxx; MainMenu.coor3 = 3*texth; /菜单的边框范围 getitemcount(MainMenuItem,&count,&totallen,&maxlen); MainMenu.itemnum = count; maxlen = (maxx/textw-totallen)/count; for(i=0,j=0;icount;i+) MainMenu.itemcoori*4 = j*textw; MainMenu.itemcoori*4+1 = MainMenu.coor0; MainMenu.itemcoori*4+2 = textw*(j+maxlen+strlen(MainMenuItemi); MainMenu.itemcoori*4+3 = MainMenu.coor3; MainMenu.itemdispxyi*2 = textw*(j+0.5*maxlen); MainMenu.itemdispxyi*2+1 = texth; MainMenu.COMMAND_IDi = i; j += maxlen+strlen(MainMenuItemi); MainMenu.itemname = MainMenuItem; /*为主菜单的名称赋值*/ / void LoadSubMenu(char *name,int ord) int count,i,j,maxlen; getitemcount(name,&count,&i,&maxlen); SubMenuord.itemname = name; SubMenuord.itemnum = count; j = textw*(maxlen+2); if(j+MainMenu.itemcoor4*ordmaxx) SubMenuord.coor0 = MainMenu.itemcoor4*(ord); SubMenuord.coor2 = SubMenuord.coor0+j; else SubMenuord.coor0 = maxx; SubMenuord.coor2 = SubMenuord.coor2-j; SubMenuord.coor1 = MainMenu.itemcoor4*ord+3; SubMenuord.coor3 = SubMenuord.coor1+count*(texth+6); for(i=0;icount;i+) SubMenuord.itemcoori*4 = SubMenuord.coor0; SubMenuord.itemcoori*4+1 = SubMenuord.coor1+i*(6+texth); SubMenuord.itemcoori*4+2 = SubMenuord.coor2; SubMenuord.itemcoori*4+3 = SubMenuord.itemcoori*4+1+texth+6; SubMenuord.itemdispxyi*2 = SubMenuord.itemcoori*4+textw; SubMenuord.itemdispxyi*2+1 = SubMenuord.itemcoori*4+1+3; SubMenuord.COMMAND_IDi = ord*100+i; / void DisplayMainMenu(void) /*显示主菜单函数*/ unsigned i; /*绘制菜单*/ setcolor(AllColorsWindowEdge); /*将当前图形屏幕的当前笔画颜色置为color*/ rectangle(0,0,getmaxx(),getmaxy(); setcolor(AllColorsMenuEdge); setfillstyle(SOLID_FILL,AllColorsMenuInGround); bar3d(MainMenu.coor0,MainMenu.coor1,MainMenu.coor2,MainMenu.coor3,0,0); setcolor(AllColors2); for(i=0;icoor0,mn-coor1,mn-coor2,mn-coor3); if(NULL=(MenuImageBuf=(unsigned char *)malloc(size) clearviewport(); outtextxy(100,100,Out of memory); /*如果内存分配不足,出错退出*/ getch(); return 1; getimage(mn-coor0,mn-coor1,mn-coor2,mn-coor3,MenuImageBuf);/*绘制子菜单*/ setcolor(AllColorsMenuEdge); setfillstyle(SOLID_FILL,AllColorsMenuInGround); bar3d(mn-coor0,mn-coor1,mn-coor2,mn-coor3,0,0); for(i=0;iitemnum;i+) if(i=mn-select) In_ActiveSubMenuItem(ord,i,1); else setcolor(AllColorsMenuInItem); outtextxy(mn-itemdispxyi*2,mn-itemdispxyi*2+1,mn-itemnamei); return 0; / static void Exitmenu(int ord) /*退出某子菜单*/ MENUTYPE *mn = &SubMenuord; if(MenuImageBuf) putimage(mn-coor0,mn-coor1,MenuImageBuf,COPY_PUT); farfree(MenuImageBuf); / void In_ActiveMainMenuItem(int select,char In_Active) /*激活某项主菜单*/ /int temp; int start,end,bot,top; MENUTYPE *tp = &MainMenu; start = tp-itemcoorselect*4+8; top = tp-itemcoorselect*4+1+2; end = tp-itemcoorselect*4+2-8; bot = tp-itemcoorselect*4+3-2; if(In_Active=0) /*未处于激活状态*/ setfillstyle(SOLID_FILL,AllColorsMenuInGround); bar(start,top,end,bot); setcolor(AllColorsMenuInItem); outtextxy(tp-itemdispxyselect*2,tp-itemdispxyselect*2+1,tp-itemnameselect); else /*处于激活状态*/ setfillstyle(SOLID_FILL,AllColorsMenuActiveGround); bar(start,top,end,bot); setcolor(AllColorsMenuActiveItem); outtextxy(tp-itemdispxyselect*2,tp-itemdispxyselect*2+1,tp-itemnameselect); /sprintf(char *)temp,%d,top); /outtextxy(200-MainMenu.select*20,100,temp); / void In_ActiveSubMenuItem(int ord,int select,char In_Active) /*激活子菜单某项*/ MENUTYPE *tp = &SubMenuord; int start,end,bot,top; start = tp-itemcoorselect*4+2; top = tp-itemcoorselect*4+1+1; end = tp-itemcoorselect*4+2-2; bot = tp-itemcoorselect*4+3-1; if(In_Active=0) /*未处于激活状态*/ setfillstyle(SOLID_FILL,AllColorsMenuInGround); bar(start,top,end,bot); setcolor(AllColorsMenuInItem); outtextxy(tp-itemdispxyselect*2,tp-itemdispxyselect*2+1,tp-itemnameselect); else /*处于激活状态*/ setfillstyle(SOLID_FILL,AllColorsMenuActiveGround); bar(start,top,end,bot); setcolor(AllColorsMenuActiveItem); outtextxy(tp-itemdispxyselect*2,tp-itemdispxyselect*2+1,tp-itemnameselect); / void InitialGraphics(void) /*图形方式初始化*/ int gdriver = DETECT,gmode; initgraph(&gdriver,&gmode,); / int GetKey(void) int key; key = bioskey(0); if(key=F1) Help_page_show(); else if(key(*maxlen) (*maxlen) = j; (*count) = i; / void Draw(void) /*功能函数,在屏幕上绘图*/ int x,x1,x2,y1,y2,ch; randomize(); do x1 = random(WindowMaxX-WindowMinX)+WindowMinX; x2 = random(WindowMaxY-WindowMinY)+WindowMinY; y1 = random(WindowMaxX-WindowMinX)+WindowMinX; y2 = random(WindowMaxY-WindowMinY)+WindowMinY; ch = random(16); setfillstyle(SOLID_FILL,ch); if(x1x2) x = x1;x1 = x2;x2 = x; if(y1y2) x = y1;y1 = y2;y2 = x; bar(x1,y1,x2,y2); delay(100); while(!bioskey(1); / void About(void) int MidX,MidY,x1,y1,x2,y2,size; void *Buffer; MidX = (WindowMaxX-WindowMinX)/2; MidY = (WindowMaxY-WindowMinY)/2; x1 = MidX-90;x2 = MidX+90; y1 = MidY-100;y2 = MidY+100; size = imagesize(x1,y1,x2,y2); setfillstyle(SOLID_FILL,CYAN); bar(WindowMinX,WindowMinY,WindowMaxX-1,WindowMaxY-1); if(Buffer=malloc(size)=NULL) outtextxy(100,100,Out of memory!); getch(); else /*根据前面介绍的坐标绘制对话框*/ getimage(x1,y1,x2,y2,Buffer); setfillstyle(SOLID_FILL,BLUE); bar(x1,y1,x2-9,y2-9); setfillstyle(SOLID_FILL,BLACK); bar(x1+8,y2-8,x2,y2); bar(x2-8,y1+8,x2,y2); setcolor(WHITE); settextjustify(CENTER_TEXT,CENTER_TEXT); outtextxy(MidX-4,MidY-40,MENU EXAMPLE); outtextxy(MidX-4,MidY-20,IN GRAPHICS MODE); outtextxy(MidX-4,MidY+25,8-1998); outtextxy(MidX-4,MidY+45,X.Y.BW); getch(); putimage(x1,y1,Buffer,COPY_PUT); free(Buffer); settextjustify(LEFT_TEXT,TOP_TEXT); / void MessageBox(char *Message) /*功能函数,显示消息框*/ int MidX,MidY,x1,y1,x2,y2,size,Len; void *Buffer; MidX = (WindowMaxX-WindowMinX)/2; MidY = (WindowMaxY-WindowMinY)/2; Len = 8*(strlen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 南阳市期中高三数学试卷
- 2025年事业单位招聘考试综合类面试真题模拟试卷:公共基础知识
- 2025年数字信号处理与通信工程师考试模拟试卷
- 心梗死经典课件
- 2025年企业培训师(高级)考试试卷:企业培训师职业素养与培训战略
- 2025年西班牙语DELEAA级写作冲刺试卷:求职信撰写技巧
- 2025年可再生能源资产交换与全面节能改造项目合同
- 2025年度双方协议离婚后子女抚养权及监护权变更执行合同
- 2025年智慧社区专业保安人员劳务雇佣合同优化版
- 2025年起重机械安装维修人员考试试卷:起重机械操作员竞赛教材试题
- 多媒体教室使用的课件
- 2025年军队专业技能岗位文职人员招聘考试(工程机械驾驶员)历年参考题库含答案详解(5卷)
- 2025年下半年广西现代物流集团社会招聘校园招聘笔试参考题库附带答案详解(10套)
- 2025年粉笔辅警考试题库
- 水声传感器技术研究与应用
- 2025年小学教研室教学计划
- 2025年上海市建筑工程施工合同模板
- 手术室护理业务学习
- 贩卖人口罪与强迫劳动罪
- 新员工入职职业道德培训
- 宽带宣传活动方案
评论
0/150
提交评论