新手求助 tc下西文下拉菜单 为什么实现不了 上下左右的移动效果 希望能给出具体的
<P>#include <process.h><BR>#include <dos.h><BR>#include <conio.h><BR>#define Key_DOWN 336<BR>#define Key_UP 328<BR>#define Key_ESC 27<BR>#define Key_ALT_F 276<BR>#define Key_ALT_X 301<BR>#define Key_ENTER 13<BR>void box(int startx,int starty,int high,int width);<BR>int GetKey(void);<BR>void Quit(void);</P><P>main()<BR>{<BR>int i,key,x,y,l;<BR>char *menu[] = {"File","Edit","Run","Option","Help","Setup","Zoom","Menu"};<BR>/* 主菜单各项 */<BR>char *red[] = { "F","E","R","O","H","S","Z","M" }; /* 加上红色热键 */<BR>char *f[] = {"Load file", "Save file", "Print", "Modify ", "Quit A1t_x"};<BR>/* File 项的子菜单 */<BR>char buf[16*10*2],buf1[16*2]; /* 定义保存文本的缓冲区 */<BR>while(1)<BR>{<BR>textbackground(BLUE);<BR>clrscr();<BR>textmode(C80);<BR>window(1,1,80,1);/* 定义显示主菜单的窗口 */<BR>textbackground(LIGHTGRAY);<BR>textcolor(BLACK);<BR>clrscr();<BR>gotoxy(5,1);<BR>for(i=0,l=0;i<8;i++)<BR>{<BR>x=wherex(); /* 得到当前光标的坐标 */<BR>y=wherey();<BR>cprintf("%s",menu[i]); /* 显示各菜单项 */<BR>l=strlen(menu[i]); /* 得到菜单项的长度 */<BR>gotoxy(x,y);<BR>textcolor(RED);<BR>cprintf("%s",red[i]); /* 在主菜单项各头字符写上红字符 */<BR>x=x+l+5;<BR>gotoxy(x,y);<BR>textcolor(BLACK); /* 为显示下一个菜单项移动光标 */<BR>}<BR>gotoxy(5,1);<BR>key=bioskey(0);<BR>switch (key)<BR>{<BR>case Key_ALT_X:<BR>exit(0); /* ALT_X 则退出 */<BR>case Key_ALT_F:<BR>{<BR>textbackground(BLACK);<BR>textcolor(WHITE);<BR>gotoxy(5,1);<BR>cprintf("%s",menu[0]); /* 加黑File 项 */<BR>gettext(5,2,20,12,buf); /* 保存窗口原来的文本 */<BR>window(5,2,20,9);/* 设置作矩形框的窗口 */<BR>textbackground(LIGHTGRAY);<BR>textcolor(BLACK);<BR>clrscr();<BR>box(1,1,7,16); /* 调用作框函数 */<BR>for(i=2;i<7;i++) /* 显示子菜单各项 */<BR>{ gotoxy(2,i);<BR>cprintf("%s",f[i-2]);<BR>}<BR>gettext(2,2,18,3,buf1); /*将下拉菜单的内容保存在buf1*/<BR>textbackground(BLACK);<BR>textcolor(WHITE);<BR>gotoxy(2,2);<BR>cprintf("%s",f[0]);/*加黑下拉菜单的第一项load file*/<BR>gotoxy(2,2);<BR>y=2;<BR>while ((key=bioskey(0))!=Key_ALT_X) /* 等待选择下拉菜单项*/<BR>{<BR>if ((key==Key_UP)||(key==Key_DOWN))<BR>{<BR>puttext(2,y,18,y+1,buf1); /* 恢复原先的项 */<BR>if (key==Key_UP)<BR>y=y==2?6:y-1;<BR>else<BR>y=y==6?2:y+1;<BR>gettext(2,y,18,y+1,buf1);/*保存要压上光条的子菜单项*/<BR>textbackground(BLACK);<BR>textcolor(WHITE);<BR>gotoxy(2,y);<BR>cprintf("%s",f[y-2]); /* 产生黑条压在所选项上 */<BR>gotoxy(2,y);<BR>}<BR>else<BR>if (key==Key_ENTER)/* 若是回车键,判断是哪一子菜单按的回<BR>车,在此没有相应的特殊处理*/<BR>{<BR>switch ( y-1 ){<BR>case 1: /* 是子菜单项第一项:Load file */<BR>break;<BR>case 2: /* Save file */<BR>break;<BR>case 3: /* print */<BR>break;<BR>case 4: /* modify */<BR>break;<BR>case 5:<BR>exit(0);<BR>default:<BR>break;<BR>}<BR>break;<BR>}<BR>else<BR>if (key==Key_ESC)<BR>break; /* 是Esc 键,返回主菜单 */<BR>}<BR>if (key==Key_ALT_X) exit(0);<BR>break;<BR>}<BR>}<BR>}<BR>}<BR>void box(int startx,int starty,int high,int width) /* 画矩形框函数 */<BR>{ int i;<BR>gotoxy(startx,starty);<BR>putch(0xda); /* 画┌ */<BR>for (i=startx+1;i<width;i++) putch(0xc4); /* 画─ */<BR>putch(0xbf); /* 画┐ */<BR>for( i=starty+1;i<high;i++)<BR>{<BR>gotoxy(startx,i);putch(0xb3); /* 画│ */<BR>gotoxy(width,i);putch(0xb3); /* 画│ */<BR>}<BR>gotoxy(startx,high);<BR>putch(0xc0); /* 画└ */<BR>for (i=startx+1;i<width;i++) putch(0xc4); /* 画─ */<BR>putch(0xd9); /* 画┘ */<BR>return ;<BR>}<BR></P>
回复:(chvjc)新手求助 tc下西文下拉菜单 为什么实...
可以实现alt+x alt+f的功能 为什么实现不了上下呢?左右是没有定义数组,上下实现不了就有点迷糊了.希望知道的大哥给出个具体的解释和修改方法. <P>好强呀!</P><P><BR>此主题相关图片如下:<BR></P>
页:
[1]
