C语言的菜单制作

上传人:wan****21 文档编号:245015891 上传时间:2024-10-07 格式:PPT 页数:20 大小:325.47KB
返回 下载 相关 举报
C语言的菜单制作_第1页
第1页 / 共20页
C语言的菜单制作_第2页
第2页 / 共20页
C语言的菜单制作_第3页
第3页 / 共20页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言的菜单制作,图形化菜单,要完成一个菜单需要考虑以下几个方面:,菜单的定义,保存部分屏幕,恢复期望的屏幕,用户的响应值传递,如何显示菜单,可以利用输出字符画出主界面上的边框和主菜单的背景区域。然后再显示主菜单,最后画出下拉菜单。(仿TC),利用ASCII中的特殊字符。如218为,,,196为,,179为,191为,,192为,,,217为,来画出应用程序的边框。,菜单的定义,思考用什么来表示菜单及其子菜单?,Struct menu,char name10 /*菜单名*/,char sub1020 /*下拉菜单*/,int n /*几个选项*/,示例,system(cls); /*调用系统的清屏命令*/ stdlib.h,textbackground(BLUE);/*将文本背景设置为蓝色*/ conio.h,window(1,1,25,80); /*定义活动文本模式窗口*/ conio.h,clrscr(); /*清除文本模式窗品*/,textx=3; texty=2; /*光标初始化位置*/,gotoxy(1,2); /*在文本窗口中设置光标*/,printf(%c,218); /*画左上角*/,for(i=0;i78;i+) printf(%c,196); /*画水平直线*/,printf(%c,191);/*画右上角*/,for(i=3;i=23;i+),gotoxy(1,i); printf(%c,179); /*画垂直线*/,gotoxy(80,i); printf(%c,179);,printf(%c,192); /*画左下角*/,for(i=0;i78;i+) printf(%c,196);,printf(%c,217); /*画右下角*/,gotoxy(1,1);,textcolor(7); /*设置文本颜色灰色*/,for(i=0;i80;i+) cprintf(%c,219);/*用符号实现画主菜单的灰色背景区*/,Cprintf与printf,1.cprintf函数用于向当前窗口输出数据,比如你用window函,数定义一个窗口 window(20,10,60,20),那么当你调用cprintf,函数时,cprintf的输出就是相对于20,10, 60,20这个窗,口,当输出的字符串长度大于当前窗口长度时,会在当前窗,口自动换行。,2.cprintf函数可以配合setcolor,setbkcolor等函数使用,而调,用printf函数时会忽略这些 函数执行的结果。,Cprintf和printf,比如执行:setcolor(RED);,cprintf(Hello world);,printf(Hello);,将会在屏幕上显示红色字符串:Hello world,和白色字符串(因为setcolor函数对printf函数不起作用)Hello,在原来的C语言中,cprintf中的c代表console,就是控制,台.(conio.h中的con也是这个意思)到了windows也继承了这,个渊源。,按照设计者本来的意图,printf是标准输出,就是指可以完,全不知道你输出的对象,只是以标准的文本流方式输出。,cprintf是与终端相关的,要用到一些系统平台,硬件设备相关的,特性,所以可以有颜色等很多东西可供选择,同时也削弱了移,植性,所以cprintf是非标准的。,定义菜单,在前面定义了表示菜单的结构体。现在需要定义具体的菜单。菜单项应该放在结构体数组中。如mainmenui就表示水平的第i个菜单(主菜单)mainmenui.name为菜单的名字,而mainmenui.subj则表示第i个主菜单下的第j个下拉选项。,示例,void Selectitem(),strcpy(ml0.name,“File”); /*下面的具体选项补空格是为了各菜单黑色背景相同*/,strcpy(ml0.str0,“New );,strcpy(ml0.str1,“Load );,strcpy(ml0.str2,“Save );,strcpy(ml0.str3,Exit );,ml0.n=6; /*保存菜单的项数*/,.,画出菜单,定义了每一个具体的菜单项,现在需要把它们通通都显示出来。对于正常菜单来说,显示菜单灰底黑色且首字符为红色的样式,表示菜单未选中。但当光标移动到某个菜单选项上时,则需要改变背景和文本颜色,以示该选项被选中。,示例,/*显示主单名*/,void DrawSelectitem(),for(i=0;i3;i+),RedText(i,1,mli.name); /*显示主菜单名,且首字母为红色*/,/*正常显示菜单*/,void RedText(int x,int y,char *z),textbackground(7); /*设置背景颜色为浅灰色*/,gotoxy(3+x*20,y);,for(j=0;zj;j+),if(j=0),textcolor(RED);/*第一个字母显示红色*/,else,textcolor(BLACK); /*设置黑色*/,cprintf(%c,zj); /*输出菜单名*/,显示选中的菜单示例,/*显示选中菜单*/,void BlackText(int x,int y,char *z),textbackground(0); /*设置背景颜色为黑色*/,textcolor(15); /*设置文本颜色为白色*/,gotoxy(3+20*x,y);/*定位坐标*/,cputs(z); /*输出菜单名字符串*/,画边框和画下拉菜单,为突出显示菜单,需要为下拉菜单设定背景颜色和文本颜色,并填加边框。设定边框的左上角坐标为l和u,右下角的坐标为r和d。,注意:此边框和前面画的不一样,前面是画的整个应用程序的边框。,/*画边框函数*/,void DrawFrame(int l,int u,int r,int d,int tcolor,int bcolor),textbackground(bcolor); /*背景颜色*/ textcolor(bcolor); /*文本颜色*/,for(i=l;i=r;i+) /*输出背景区域*/,for(j=u;j=d;j+),gotoxy(i,j); printf(%c,219); /*输出背景字符*/,textcolor(tcolor);/*边框颜色*/,for(i=u+1;id;i+) /*在背景区域内输出边框线*/,gotoxy(l,i); cprintf(%c,179); /*垂直线*/ gotoxy(r,i); cprintf(%c,179);,for(i=l+1;ir;i+),gotoxy(i,u);cprintf(%c,196); /*水平线*/ gotoxy(i,d); cprintf(%c,196);,gotoxy(l,u); cprintf(%c,218);/*左上角*/ gotoxy(r,u); cprintf(%c,191);/*右上角*/,gotoxy(l,d); cprintf(%c,192);/*左下角*/ gotoxy(r,d); cprintf(%c,217); /*右下角*/,画下拉菜单,当选择了主菜单后,就需要调用画下拉菜单函数。首先保存当前区域,以备将来恢复,然后返选显示主菜单,同时调用画边框函数显示下拉菜单的边框,在下拉菜单区域内显示各菜单选项,设置默认选项为第一项,其余各项首字符为红色。,/*显示具体下拉选择项目*/,void DrawMl(int n),gettext(1,1,80,25,save);/*保存被掩盖的地方*/,BlackText(n,1,mln.name);/*反选显示主菜单*/,DrawFrame(3+20*n-1,2,3+20*n+19,3+mln.n,0,7);/*下拉菜单的边框*/,for(i=3;i3+mln.n;i+)/*输出所选菜单各选项*/,if(i=3),BlackText(n,i,mln.stri-3);/*默认选中第一项*/,else,RedText(n,i,mln.stri-3);/*其余各项首字符红色显示*/,gotoxy(79,1);,MoveMl(n,3);/*菜单选项的控制*/,菜单选项的控制,选择菜单的时候,可以接受的键盘操作可以是水平方向和垂直方向。,当所按键为:,ESC键,恢复打开菜单前的界面,退出循环。,Left左光标键,恢复打开当前下拉菜单前的界面,显示前一个下拉菜单,即取消当前的下拉菜单,显示新的下拉菜单。等等,最后一步了!,如何知用户按了哪个键喃?,键盘的操作分两类:一个是在屏幕编辑区的操作,另一个是在菜单区的操作。,需要使用全局变量来记录当前光标的位置。,需要具体定义某个键对应的操作。,需要使用循环一直监听,直到用户退出。,完整示例,Menu.c,同学们认真研究一下再写,函数名: bioskey,功 能: 直接使用BIOS服务的键盘接口,函数原型:int bioskey (int cmd),说明:bioskey()的函数原型在bios.h中,bioskey()完成直接键盘操作,cmd的值决定执行什么操作。,cmd = 0: 当cmd是0,bioskey()返回下一个在键盘键入的,值(它将等待到按下一个键)。它返回一个16位的二进制数,包,括两个不同的值。当按下一个普通键时,它的低8位数存放该字,符的ASCII码,高8位存放该键的扫描码;对于特殊键(如方向键、,F1F12等等),低8位为0,高8位字节存放该键的扫描码。,cmd = 1:,当cmd是1,bioskey()查询是否按下一个键,若按下一个键则返回非零值,否则返回0。,cmd = 2:,当cmd是2,bioskey()返回Shift、Ctrl、Alt、ScrollLock、NumLock、CapsLock、Insert键的状态。各键状态存放在返回值的低8位字节中。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!