田里兵蜂 发表于 2007-2-5 15:27

[休闲]制作文字菜单

<P>#include &lt;stdlib.h&gt;<BR>#include &lt;conio.h&gt;<BR>#include &lt;dos.h&gt;<BR>#include &lt;string.h&gt;</P>
<P>/*定义各键的bioskey(0)的按键返回值*/<BR>#define Key_DOWN     0x5000<BR>#define Key_UP         0x4800<BR>#define Key_A        0x1e41<BR>#define Key_a         0x1e61<BR>#define Key_B         0x3042<BR>#define Key_b         0x3062<BR>#define Key_C         0x2e43<BR>#define Key_c         0x2e63<BR>#define Key_E         0x1245<BR>#define Key_e         0x1265<BR>#define Key_ENTER     0x1c0d</P>
<P>/*用户选择的行,缺省为0*/<BR>int activeline=0;    <BR>/*存储用户选择区*/<BR>char buf[8*4*2];</P>
<P>/*用来激活用户选择的行*/<BR>void modicolor(char *buf,int active)<BR>{    int red=(WHITE+(RED&lt;&lt;4));    /*红底白字*/<BR>    int white=(WHITE+(BLUE&lt;&lt;4));    /*蓝底白字*/<BR>    int i=1;<BR>    while(i&lt;=63)<BR>    {<BR>        if (i/16==active){<BR>            if  ((i%2)!=0)<BR>                *(buf+i)=red;<BR>        }    <BR>        else if((i%2)!=0)<BR>            *(buf+i)=white;<BR>        i+=2;<BR>    }<BR>    activeline=active;<BR>    puttext(9,10,16,13,buf);<BR>}</P>
<P>int main()<BR>{<BR>    int ky=0;        <BR>    char ch;<BR>    textattr(WHITE+(BLACK&lt;&lt;4));<BR>    clrscr();</P>
<P>    textmode(C80);<BR>    textattr(RED+(5&lt;&lt;4));<BR>    window(7,8,19,15);    /*生成一个洋红色窗口*/<BR>    clrscr();<BR>    textattr(WHITE+(BLUE&lt;&lt;4));<BR>    window(8,9,18,14);    /*洋红色窗口内嵌一个蓝色窗口*/<BR>    clrscr();<BR>    gotoxy(3,2);<BR>    cprintf("E:exit");<BR>    gotoxy(3,3);<BR>    cprintf("A:dir");<BR>    gotoxy(3,4);<BR>    cprintf("B:dir/p");<BR>    gotoxy(3,5);<BR>    cprintf("C:dir/w\r\n");<BR>    gettext(9,10,16,13,buf);<BR>    modicolor(buf,0);</P>
<P>    while(ky!=Key_E &amp;&amp; ky!=Key_e)<BR>    {<BR>        ky=bioskey(0);<BR>        switch(ky)<BR>        {<BR>            case Key_UP:<BR>                <BR>            if (activeline==0){<BR>                    modicolor(buf,3);<BR>                    break;<BR>            }<BR>            if (activeline!=0){<BR>                    modicolor(buf,--activeline);<BR>                    break;<BR>            }<BR>            case Key_DOWN:<BR>                if (activeline==3){<BR>                    modicolor(buf,0);<BR>                    break;<BR>                }<BR>                if (activeline!=3){<BR>                    modicolor(buf,++activeline);<BR>                    break;<BR>                }<BR>            case Key_ENTER:<BR>                if (activeline==0) exit(0);<BR>                if (activeline==1) goto dir;<BR>                if (activeline==2) goto dirp;<BR>                if (activeline==3) goto dirw;<BR>            case Key_A:<BR>            case Key_a:<BR>        dir:        system("dir");<BR>                    getch();<BR>                    modicolor(buf,activeline);<BR>                    break;<BR>                case Key_B:<BR>                case Key_b:<BR>        dirp:            system("dir /p");<BR>                    getch();<BR>                    modicolor(buf,activeline);<BR>                    break;<BR>                case Key_C:<BR>                case Key_c:<BR>        dirw:            system("dir /w");<BR>                    getch();<BR>                    modicolor(buf,activeline);<BR>                    break;<BR>            }</P>
<P>        }</P>
<P>}<BR></P>
<P><BR> </P>[attach]16693[/attach]<BR>

一笔苍穹 发表于 2007-2-6 19:36

<P>有意思~</P>

页: [1]

编程论坛