麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

文本模式下菜單的實(shí)現(xiàn)

2019-09-06 23:33:31
字體:
供稿:網(wǎng)友

                      

作者:KKnD

   

  近幾天翻出了上學(xué)期寫的計(jì)算機(jī)原理的課設(shè)程序,里面的菜單是用TC2.0寫的,雖然很簡陋,可擴(kuò)充性幾乎沒有,但基本的功能還是都有的?;叵肫鸫笠坏臅r(shí)候想寫個(gè)菜單抓耳撓腮的窘像,心想對要寫課設(shè)需要菜單的同學(xué)們還是有一定幫助的。于是,設(shè)計(jì)思想和源代碼我就公開了。望各位高手不要取笑。

   

  一般用TC寫菜單需要包含conio.h,它提供了gotoxy()、textbackground()等一系列有用的函數(shù),至于判斷鍵盤輸入我喜歡使用bios.h里面的bioskey()函數(shù),它可以精確判斷用戶究竟按下的是什么鍵。

   

#include <conio.h>
   #include <bios.h>

   
     菜單邊框就是由幾個(gè)基本的字符組成的,這下字符通常被人稱為“制表符”,這些字符無法直接由鍵盤輸入,而是由按住alt鍵,在數(shù)字小鍵盤上輸入字符對應(yīng)的ascii碼,再松開alt鍵,就會(huì)出現(xiàn)選定的字符。

   

下表是常用的制表符和對應(yīng)的ascii碼:

   
                                                                                                                                       
       

         ┌

       
       

         218

       
       

         ┐

       
       

         191

       
       

         ─

       
       

         196

       
       

         │

       
       

         179

       
       

         └

       
       

         192

       
       

         ┘

       
       

         217

       
   

定義常量:

                                                                                                                                                                               
       

         int leftUa=218;

       
//左上角
       

         int righUa=191;

       
//右上角
       

         int leftDa=192;

       
//左下角
       

         int righDa=217;

       
//右下角
       

         int lineHc=196;

       
//橫線
       

         int lineVc=179;

       
//豎線
   

畫菜單沒點(diǎn)顏色也顯得單調(diào),于是定義顏色

   

int     MENUBACKCOLOR=7;//灰色
   int     MENUTEXTCOLOR=0;//黑色

   

菜單項(xiàng)的間距應(yīng)該固定,所以有

   

int     MENULEFTEDGE=7;
   int MENUDISTANCE=13;

   

行了,可以先畫個(gè)主菜單了
 

   

void drawMain()
   {
    gotoxy(1,1);//設(shè)定起始點(diǎn)坐標(biāo)
    textbackground(MENUBACKCOLOR);//背景色設(shè)成菜單用背景色
    textcolor(MENUTEXTCOLOR);//前景色設(shè)成菜單用前景色
    insline();//將第一行用背景色填充
    cprintf("%c%c%c",lineVc,4,lineVc);//輸出一個(gè)裝飾性圖案當(dāng)圖標(biāo)

   

 gotoxy(MENULEFTEDGE,1);
    cprintf("%c ML %c",17,16);//菜單項(xiàng)1
    gotoxy(MENULEFTEDGE+MENUDISTANCE,1);
    cprintf("%c AS %c",17,16);//菜單項(xiàng)2
    gotoxy(MENULEFTEDGE+MENUDISTANCE*2,1);
    cprintf("%c HL %c",17,16);//菜單項(xiàng)3
    gotoxy(74,1);
    cprintf("     EXIT ");//“退出”
    textbackground(WINDOWBACKCOLOR);
    textcolor(WINDOWTEXTCOLOR);//恢復(fù)顏色設(shè)置
   }

   

上面的代碼里面有幾條要注意:
   
   1)輸出字符的位置并不是確定的,可以酌情調(diào)試更改,總之要得到自己滿意的效果就多調(diào)試
   
   2)開始畫菜單之前要更改顏色,畫完后一定要把顏色恢復(fù)回來,否則有時(shí)會(huì)出現(xiàn)很奇怪的現(xiàn)象
   
   3)文本模式的屏幕被分成80*25格,每格放一個(gè)字符,坐標(biāo)是從(1,1)開始到(80,25)

   

  有了第一個(gè)函數(shù),畫出了基本的菜單,現(xiàn)在該考慮畫菜單的選擇了。其實(shí)選擇也就是更改背景色和前景色之后,在原字符的位置重新輸出該字符就行了。其中mainIndex是菜單項(xiàng)的索引,用來表示選擇了哪個(gè)菜單項(xiàng)時(shí)使用的。

   

void     drawMainSel(int mainIndex)
   {
    char*     mainText;
    int i=8;
    if(mainIndex==3)//到了“EXIT”了,特殊處理
    {
     gotoxy(74,1);
     textbackground(SELBACKCOLOR);
     for(i=0;i<=5;i++)
      cprintf("     ");
     textcolor(SELTEXTCOLOR);
     gotoxy(75,1);
     cprintf("EXIT");
     textbackground(WINDOWBACKCOLOR);
     textcolor(WINDOWTEXTCOLOR);
     return;
    }
    gotoxy(MENULEFTEDGE+MENUDISTANCE*mainIndex,1);//到菜單項(xiàng)所在的坐標(biāo)
    textbackground(SELBACKCOLOR);//設(shè)置顏色為“選擇”
    for(i=0;i<=7;i++)
     cprintf(" ");//清除原來的字符
    textcolor(SELARROWCOLOR);
    gotoxy(MENULEFTEDGE+MENUDISTANCE*mainIndex,1);
    cprintf("%c   %c",4,4);
    textcolor(SELTEXTCOLOR);
    gotoxy(10+MENUDISTANCE*mainIndex,1);
    switch(mainIndex)
    {
     case 0:
      mainText="ML";
      break;
     case 1:
      mainText="AS";
      break;
     case 2:
      mainText="HL";
      break;
    }
    cprintf("%s",mainText);//為什么這么畫呢?實(shí)話說:為了好看+偷懶
    textbackground(WINDOWBACKCOLOR);
    textcolor(WINDOWTEXTCOLOR);
   }

   

  選擇項(xiàng)移動(dòng)了怎么辦呢?需要一個(gè)UnSel函數(shù),將字符再畫回去(當(dāng)然重畫主菜單也可以,就是耗時(shí)耗資源),然后將菜單項(xiàng)的索引值改變,再調(diào)用Sel函數(shù)?;仡^一看,發(fā)現(xiàn)我用的也是偷懶的法子,重畫了主菜單。但是這方法只對主菜單可以用,子菜單會(huì)有很明顯的閃爍。

   

  上面的代碼畫個(gè)菜單項(xiàng)不多的主菜單已經(jīng)足夠了,可是不夠完美。需要個(gè)子菜單的畫法。我想下拉式的子菜單不過是一個(gè)方框,里面輸出字符而已,那么一個(gè)畫方框的函數(shù)就是第一需要了:

   

void     drawDrop(int rowSize,int Rows,int cellX,int cellY)
   {
    int i=1;
    int j=1;
    textbackground(MENUBACKCOLOR);
    textcolor(MENUTEXTCOLOR);

   

 gotoxy(cellX,cellY);
    cprintf("%c",leftUa);//畫左上角
    for(j=1;j<=rowSize;j++)
     cprintf("%c",lineHc);//一行多寬,就畫多長的橫線
    cprintf("%c",righUa);//畫右上角

   

 for(i=1;i<=Rows;i++)
    {
     cellY++;
     gotoxy(cellX,cellY);
     cprintf("%c",lineVc);
     for(j=1;j<=rowSize;j++)
      cprintf(" ");
     cprintf("%c",lineVc);
    }//畫上下邊框之間的部分

   

 cellY++;
    gotoxy(cellX,cellY);
    cprintf("%c",leftDa);
    for(i=1;i<=rowSize;i++)
     cprintf("%c",lineHc);
    cprintf("%c",righDa);//畫下邊框
    textbackground(WINDOWBACKCOLOR);
    textcolor(WINDOWTEXTCOLOR);
   }

   

  有了方框就可以算坐標(biāo),然后向里面寫字符了,只是正像前面所說的,子菜單不能沒有一個(gè)UnSel函數(shù)。可以自己酌情編寫。

   

  畫菜單的函數(shù)都寫的差不多了,只缺一個(gè)調(diào)用這些函數(shù),并且判別菜單選擇的函數(shù),這里首先要有一個(gè)死循環(huán),用于接收消息;然后是判斷鍵盤輸入,都按下了那些鍵,按著鍵值來判斷該執(zhí)行什么功能,當(dāng)按下回車時(shí)尤其重要,這時(shí)就要根據(jù)菜單索引值來執(zhí)行程序的功能了,那當(dāng)然程序不是只畫個(gè)菜單就能了事的,只有菜單沒內(nèi)容,課設(shè)是過不去的。廢話少說看下面:

   

int i=0;//接受輸入的鍵值用
   int j=0;//主菜單索引
   int k=0;//子菜單索引
   clrscr();
   drawMain();
   drawClear();
   drawMainSel(j);//菜單初始化
   while(1)
   {
    i=bioskey(0);//等待鍵盤輸入
    switch(i)
    {
     case     19712://用戶按下“左箭頭”
      j++;
      if(j==4)     j=0;
      drawMain();
      drawClear();
      drawMainSel(j);
      if(MENUSHOWN==TRUE)
      {
       k=0;
       drawSub(j);
       drawSubSel(j,k);
      }
      break;
   ...
   ...
   ...

   

  MENUSHOWN是一個(gè)變量,它標(biāo)志著子菜單的狀態(tài)是已經(jīng)展開還是收著不動(dòng),不過沒什么大用,純是好看。上面的函數(shù)只是一小部分,本身函數(shù)太長,貼不下...

   

  我自己的菜單里還有其他一些華而不實(shí)的東西,而且就是為了課設(shè)而專門作的,所以內(nèi)容和形式很雜亂,設(shè)計(jì)思想我覺得差不多就是這些了,重要的還是這些思想嘛。好了,話說得差不多了,想要源代碼的話請點(diǎn)擊此處或去Turbo     C版的下載倉庫下載。  

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 91色综合综合热五月激情 | 精品国产一区二区三区久久久 | 成人免费网视频 | 精品久久久久久久久久久aⅴ | 亚洲男人的天堂在线视频 | 手机av免费电影 | 国产午夜精品一区 | 久久久av亚洲男天堂 | 欧美aaaaa一级毛片在线 | 成人在线视频播放 | 国产噜噜噜 | 黄色免费播放网站 | www.com国产精品 | 婷婷亚洲一区二区三区 | 免费特黄| 国产精品视频免费在线观看 | 91精品国产网站 | 97视频 | 狠狠操精品视频 | 美国一级黄色毛片 | 本站只有精品 | 国产88久久久国产精品免费二区 | 成人午夜视屏 | 欧美一级成人 | 双性精h调教灌尿打屁股的文案 | 黄色视屏免费观看 | 91九色国产视频 | 在线高清中文字幕 | 国产免费高清在线视频 | 免费观看黄视频 | 精品久久久久久久久久久αⅴ | 男男啪羞羞视频网站 | 草久在线 | 本站只有精品 | 中国7777高潮网站 | 毛片在线免费播放 | 日韩一级片一区二区三区 | 免费一及片| 99re热精品视频 | 国内精品久久久久久久星辰影视 | 一级电影免费 |