yuerhb 发表于 2007-7-9 14:52

怎么实现键盘控制循环问题啊?

请知道的高手,多多指教。。。。<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]

yuerhb 发表于 2007-7-10 13:25

又没人知道?哎~~~[em13]

cdmalcl 发表于 2007-7-10 14:04

TC还是VC?

yuerhb 发表于 2007-7-10 16:41

<P>TC啊!!怎么 做知道吗?</P>

永久的守护 发表于 2007-7-10 16:47

静态的可以用<BR>key = getch() ;<BR>动态的<BR>key = bioskey(0) ;

yuerhb 发表于 2007-7-10 17:10

谢谢,这个我知道!只是循环的过程我老是做的有缺陷!菜单不光这两页,很多,他们之间的切换挺麻烦的。。。。[em03]

ba_wang_mao 发表于 2007-7-10 18:15

假设将主菜单已经存放到数组char *main_menu[10];//指针字符串数组<BR>一级菜单放在数组char *sub1_menu[10];//指针字符串数组<BR>二级菜单放在数组char *sub2_menu[10];//指针字符串数组<BR>//切记指针字符串数组必须事先分配内存<BR>// for (i=0;i&lt;10;i++)<BR>      main_menu[i] = (char *)malloc(100*sizeof(char));<BR><BR>void main()<BR>{<BR>   //初始化<BR>     依次显示主菜单项<BR>  //while (1)<BR>     {<BR>           1、显示亮条菜单项<BR>           2.获取键码<BR>           3.1上键,则亮条上移<BR>      3.2下键,则亮条下移<BR>      3.3回车键,则执行相应的程序   <BR>     } <BR>}

cdmalcl 发表于 2007-7-10 23:09

<P>#include &lt;stdio.h&gt;<BR>#include &lt;conio.h&gt;<BR>#include &lt;string.h&gt;<BR>#include &lt;stdlib.h&gt;<BR>#include &lt;graphics.h&gt;</P>
<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(&amp;gd, &amp;gm, "") ;<BR>}</P>
<P>int InitMune()<BR>{<BR>    int i, j ;<BR>    char *c = "Sub mune 0" ;</P>
<P>    for(i = 0;i &lt; MAIN_MUNE_NUM;i++)<BR>    {<BR>        subMune[i] = (char **)calloc(subNum[i],sizeof(char)) ;<BR>    }</P>
<P>    for(i = 0;i &lt; MAIN_MUNE_NUM;i++)<BR>     for(j = 0;j &lt; 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 &gt; 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 &lt; 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 &gt; 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 &lt; 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 &lt; 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 &lt; 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>

yuerhb 发表于 2007-7-11 09:18

谢谢各位,我再仔细看看!!!~~~[em28]

页: [1]

编程论坛