怎么实现键盘控制循环问题啊?
请知道的高手,多多指教。。。。<BR> 即有:<BR><TABLE borderColor=#cccccc cellSpacing=2 cellPadding=3 width=164 bgColor=#ffffff border=1>
<TR>
<TD> 菜单1<BR>菜单2<BR>菜单3</TD></TR></TABLE><BR><BR>
<TABLE borderColor=#cccccc cellSpacing=2 cellPadding=3 width=173 bgColor=#ffffff border=1>
<TR>
<TD> 主菜单</TD></TR></TABLE><BR><BR>
<TABLE borderColor=#cccccc cellSpacing=2 cellPadding=3 width=276 bgColor=#ffffff border=1>
<TR>
<TD> 执行菜单X<BR></TD></TR></TABLE><BR><BR>当按上下键时,在菜单1--3之间切换<BR>按退格键时,回主菜单<BR>在菜单1--3某项时按回车,进入执行。[em03]
<P>#define MAIN_MUNE_NUM 3<BR>#define NAME_MAX_LAN 20<BR>#define SCR_X 2<BR>#define SCR_Y 5<BR>#define WIN_X 5<BR>#define WIN_Y 40<BR>#define SUB_MUNE_H 20</P>
<P>#define TEXT_COLOR 3</P>
<P>#define ESC 283<BR>#define RIGHT 19712<BR>#define LEFT 19200<BR>#define DOWN 20480<BR>#define UP 18432<BR>#define ENTER 7181</P>
<P>char *mainMune[MAIN_MUNE_NUM] =<BR> {"Main mune 1"<BR> ,"Main mune 2"<BR> ,"Main mune 3"<BR> } ;<BR>char **subMune[MAIN_MUNE_NUM] ;<BR>int subNum[MAIN_MUNE_NUM] = {2, 3, 3} ;<BR>int chooseMain = 0, chooseSub = 0 ;<BR>int subSwitch = 0 ;<BR>float mMLen ;<BR>void *muneBKView ;</P>
<P>int Init() ;<BR>int InitGraph() ;<BR>int InitMune() ;<BR>int Process() ;<BR>int drawBKView() ;<BR>int drawMainMune(int num, int Mode) ;<BR>int drawSubView(int num) ;<BR>int drawSubMune(int num, int choose, int Mode) ;<BR>int Exit(int Mode) ;</P>
<P>int main(void)<BR>{<BR> Init() ;<BR> Process() ;<BR> Exit(0) ;<BR>}</P>
<P>int Init()<BR>{<BR> InitMune() ;<BR> InitGraph() ;</P>
<P> mMLen = (float)(getmaxx()-20)/MAIN_MUNE_NUM ;<BR> settextstyle(1, 0, 5) ;<BR> muneBKView = malloc(imagesize(SCR_X+5<BR> , SCR_Y+25<BR> , SCR_X+mMLen-5<BR> , SCR_Y+25+subNum[0]*SUB_MUNE_H)<BR> ) ;<BR> getimage(SCR_X+5, SCR_Y+25<BR> , SCR_X+mMLen-5, SCR_Y+25+subNum[0]*SUB_MUNE_H<BR> , muneBKView) ;<BR>}</P>
<P>int InitGraph()<BR>{<BR> int gd = DETECT, gm = 0 ;</P>
<P> initgraph(&gd, &gm, "") ;<BR>}</P>
<P>int InitMune()<BR>{<BR> int i, j ;<BR> char *c = "Sub mune 0" ;</P>
<P> for(i = 0;i < MAIN_MUNE_NUM;i++)<BR> {<BR> subMune[i] = (char **)calloc(subNum[i],sizeof(char)) ;<BR> }</P>
<P> for(i = 0;i < MAIN_MUNE_NUM;i++)<BR> for(j = 0;j < subNum[i];j++)<BR> {<BR> subMune[i][j] = (char *)calloc(NAME_MAX_LAN,sizeof(char)) ;<BR> }</P>
<P> strcpy(subMune[0][0], "Sub mune 0") ;<BR> strcpy(subMune[0][1], "Sub mune 1") ;</P>
<P> strcpy(subMune[1][0], "Sub mune 0") ;<BR> strcpy(subMune[1][1], "Sub mune 1") ;<BR> strcpy(subMune[1][2], "Sub mune 2") ;</P>
<P> strcpy(subMune[2][0], "Sub mune 0") ;<BR> strcpy(subMune[2][1], "Sub mune 1") ;<BR> strcpy(subMune[2][2], "Sub mune 2") ;<BR>}</P>
<P>int Process()<BR>{<BR> int key ;</P>
<P> drawBKView() ;</P>
<P> while(1)<BR> {<BR> if(kbhit())<BR> {<BR> key = bioskey(0) ;<BR> switch(key)<BR> {<BR> case RIGHT:<BR> if(subSwitch == 1)<BR> {<BR> putimage(SCR_X+chooseMain*mMLen+5, SCR_Y+25, muneBKView, COPY_PUT) ;<BR> chooseSub = 0 ;<BR> }<BR> drawMainMune(chooseMain, 0) ;<BR> chooseMain = (chooseMain > MAIN_MUNE_NUM-2) ? 0:chooseMain+1;<BR> if(subSwitch == 1)<BR> drawSubView(chooseMain) ;<BR> drawMainMune(chooseMain, 1) ;<BR> break ;<BR> case LEFT:<BR> if(subSwitch == 1)<BR> {<BR> putimage(SCR_X+chooseMain*mMLen+5, SCR_Y+25, muneBKView, COPY_PUT) ;<BR> chooseSub = 0 ;<BR> }<BR> drawMainMune(chooseMain, 0) ;<BR> chooseMain = (chooseMain < 1) ? MAIN_MUNE_NUM-1:chooseMain-1;<BR> if(subSwitch == 1)<BR> drawSubView(chooseMain) ;<BR> drawMainMune(chooseMain, 1) ;<BR> break ;<BR> case DOWN:<BR> if(subSwitch == 1)<BR> {<BR> drawSubMune(chooseMain, chooseSub, 0) ;<BR> chooseSub = (chooseSub > subNum[chooseMain]-2) ? 0:chooseSub+1;<BR> drawSubMune(chooseMain, chooseSub, 1) ;<BR> }<BR> else<BR> {<BR> chooseSub = 0 ;<BR> subSwitch = 1 ;<BR> drawSubView(chooseMain) ;<BR> }<BR> break ;<BR> case UP:<BR> if(subSwitch == 1)<BR> {<BR> drawSubMune(chooseMain, chooseSub, 0) ;<BR> chooseSub = (chooseSub < 1) ? subNum[chooseMain]-1:chooseSub-1;<BR> drawSubMune(chooseMain, chooseSub, 1) ;<BR> }</P>
<P> break ;<BR> case ESC:<BR> if(subSwitch == 1)<BR> putimage(SCR_X+chooseMain*mMLen+5, SCR_Y+25, muneBKView, COPY_PUT) ;<BR> subSwitch = 0 ;<BR> break ;<BR> case ENTER:<BR> Exit(0) ;<BR> default :<BR> sound(1000) ;<BR> delay(100) ;<BR> nosound() ;<BR> break ;<BR> <BR> }<BR> }</P>
<P> }</P>
<P> getch() ;<BR>}</P>
<P>int drawBKView()<BR>{<BR> int i ;</P>
<P> setcolor(1) ;<BR> setfillstyle(1, 9) ;<BR> bar3d(SCR_X, SCR_Y, getmaxx()-SCR_Y, getmaxy()-SCR_X, 3, 1) ;<BR> setfillstyle(1, 5) ;<BR> floodfill(SCR_X+10, SCR_Y-2, getcolor()) ;<BR> floodfill(getmaxx()-SCR_Y+2, SCR_Y, getcolor()) ;</P>
<P> for(i = 0;i < MAIN_MUNE_NUM;i++)<BR> drawMainMune(i, i == 0) ;</P>
<P> setcolor(6) ;<BR> setfillstyle(1, 15) ;<BR> bar3d(WIN_X, WIN_Y, getmaxx()-WIN_X-SCR_Y, getmaxy()-WIN_X, 3, 1) ;<BR> setfillstyle(1, 10) ;<BR> floodfill(WIN_X+10, WIN_Y-1, getcolor()) ;<BR> floodfill(getmaxx()-WIN_X-SCR_Y+1, WIN_Y+1, getcolor()) ;</P>
<P>}</P>
<P>int drawMainMune(int num, int Mode)<BR>{<BR> setfillstyle(1, 6+Mode*4) ;<BR> setcolor(4) ;<BR> rectangle(SCR_X+num*mMLen+5, SCR_Y+5, SCR_X+(num+1)*mMLen-5, SCR_Y+25) ;<BR> floodfill(SCR_X+num*mMLen+8, SCR_Y+8, getcolor()) ;<BR> setcolor(TEXT_COLOR+Mode*4) ;<BR> outtextxy(SCR_X+num*mMLen+8, SCR_Y+10, mainMune[num]) ;<BR>}</P>
<P>int drawSubView(int num)<BR>{<BR> int i ;</P>
<P> free(muneBKView) ;<BR> muneBKView = malloc(imagesize(SCR_X+num*mMLen+5<BR> , SCR_Y+25<BR> , SCR_X+(num+1)*mMLen-5<BR> , SCR_Y+25+subNum[num]*SUB_MUNE_H)<BR> ) ;<BR> getimage(SCR_X+num*mMLen+5, SCR_Y+25<BR> , SCR_X+(num+1)*mMLen-5, SCR_Y+25+subNum[num]*SUB_MUNE_H<BR> , muneBKView) ;</P>
<P> setcolor(2) ;<BR> rectangle(SCR_X+num*mMLen+5, SCR_Y+25<BR> , SCR_X+(num+1)*mMLen-5, SCR_Y+25+subNum[num]*SUB_MUNE_H) ;</P>
<P> setfillstyle(1, 13) ;<BR> floodfill(SCR_X+num*mMLen+6, SCR_Y+26,getcolor()) ;</P>
<P> for(i = 0;i < subNum[num];i++)<BR> {<BR> line(SCR_X+num*mMLen+7, SCR_Y+25+(i+1)*SUB_MUNE_H<BR> , SCR_X+(num+1)*mMLen-8, SCR_Y+25+(i+1)*SUB_MUNE_H-1) ;<BR> drawSubMune(num, i, i == 0) ;<BR> }<BR>}</P>
<P>int drawSubMune(int num, int choose, int Mode)<BR>{<BR> setcolor((!Mode)?13:4) ;<BR> rectangle(SCR_X+num*mMLen+7, SCR_Y+25+choose*SUB_MUNE_H<BR> , SCR_X+(num+1)*mMLen-8, SCR_Y+25+(choose+1)*SUB_MUNE_H-2) ;<BR> setfillstyle(1, (!Mode)?getcolor():4) ;<BR> floodfill(SCR_X+num*mMLen+8, SCR_Y+26+choose*SUB_MUNE_H, getcolor()) ;</P>
<P> setcolor(TEXT_COLOR+(!Mode)*4) ;<BR> outtextxy(SCR_X+num*mMLen+10, SCR_Y+28+choose*SUB_MUNE_H, subMune[num][choose]) ;<BR>}</P>
<P>int Exit(int Mode)<BR>{<BR> free(muneBKView) ;<BR> free(subMune) ;<BR> closegraph() ;</P>
<P> switch(Mode)<BR> {<BR> case 0:<BR> exit(0) ;<BR> }<BR>}</P> 谢谢各位,我再仔细看看!!!~~~[em28]
页:
[1]
