C語(yǔ)言程序設(shè)計(jì)(第9章實(shí)用編程技巧)2

字號(hào):

9.2 菜單設(shè)計(jì)技術(shù)
     菜單在用戶編寫的程序中占據(jù)相當(dāng)一部分內(nèi)容。設(shè)計(jì)一個(gè)高質(zhì)量的菜單,不僅能使系統(tǒng)美觀,更主要的是能夠使操作者使用方便,避免一些誤操作帶來(lái)的嚴(yán)重后果。
    9.2.1 下拉式菜單的設(shè)計(jì)
     下拉式菜單是一個(gè)窗口菜單,它具有一個(gè)主菜單,其中包括幾個(gè)選擇項(xiàng),主菜單的每一項(xiàng)又可以分為下一級(jí)菜單,這樣逐級(jí)下分,用一個(gè)個(gè)窗口的形式彈出在屏幕上,一旦操作完畢又可以從屏幕上消失,并恢復(fù)原來(lái)的屏幕狀態(tài)。
     設(shè)計(jì)下拉式菜單的關(guān)鍵就是在下級(jí)菜單窗口彈出之前,要將被該窗口占用的屏幕區(qū)域保存起來(lái),然后產(chǎn)生這一級(jí)菜單窗口,并可用光標(biāo)鍵選擇菜單中各項(xiàng),用回車鍵來(lái)確認(rèn)。如果某選擇項(xiàng)還有下級(jí)菜單,則按同樣的方法再產(chǎn)生下一級(jí)菜單窗口。
     用Turbo C 在文本方式時(shí)提供的函數(shù)gettext( ) 來(lái)放屏幕規(guī)定區(qū)域的內(nèi)容,當(dāng)需要時(shí)用puttext( )函數(shù)釋放出來(lái),再加上鍵盤管理函數(shù)bioskey( ),就可以完成下拉式菜單的設(shè)計(jì)。
     程序menu1.c是一個(gè)簡(jiǎn)單拉式菜單。運(yùn)行時(shí)在屏幕上一行顯示主菜單的內(nèi)容,當(dāng)按ALT+F則進(jìn)入File子菜單,然后可用光標(biāo)鍵移動(dòng)色棒選擇操作,用回車確認(rèn)。用Esc鍵退出主菜單,并可用ALT+X退出菜單系統(tǒng)。
    [例9-9] 下拉式菜單menu1.c
    /*下拉式菜單menu1.c*/
    #include
    #include
    #include
    #include
    void main(void)
    {
     int i,key,key0,key1,y,test;
     char *m[ ]={"File","Edit","Run","Compile","Projsct","Options","Debug","Break/watch "}; /*定義主菜單的內(nèi)容*/
     char *f[ ]={"Load F3", /* 定義FILE 子菜單的內(nèi)容*/
     "Pick ALT+F3",
     "New",
     "Save F2",
     "Write to",
     "Directory",
     "Change dir",
     "Os shell",
     "Quit ALT+X"};
     char buf[16*10*2],buf1[16*2]; /* 定義保存屏幕區(qū)域的數(shù)組變量*/
     textbackground(BLUE); /* 設(shè)置文本屏幕背景色*/
     clrscr( ); /* 屏幕背徑著色*/
     window(1,1,80,1); /* 定義一個(gè)文本窗口*/
     textbackground(WHITE); /*設(shè)置窗口背景色*/
     textcolor(BLACK);
     clrscr( );
     window(1,1,80,2);
     for(i=0;i<8;i++)
     cprintf("%s",m[i]); /*顯示主菜單的內(nèi)容*/
     while(1)
     {
     key=0;
     while(bioskey(1) == 0); /*等待鍵盤輸入*/
     key = bioskey(0); /*取鍵盤輸入碼*/
     key = key&0Xff? 0:key>>8; /*只取擴(kuò)充鍵碼*/
     if(key == 45) eXit(0); /*如果按ALT+X 鍵則退出*/
     if(key == 33) /* 如果按ALT+F 則顯示子菜單*/
     {
     textbackground(BLACK);
     textcolor (WHITE);
     gotoxy(4,1);
     cprintf("%s",m[0]);
     gettext(4,2,19,11,buf);/*保存窗口區(qū)域的在原有內(nèi)容*/
     window(4,2,19,11);
     textbackground(WHITE);
     textcolor(BLACK);
     clrscr( );
     window(4,2,19,12);
     gotoxy(1,1); /*作一個(gè)單線形邊框*/