C語言的菜單制作.ppt_第1頁
C語言的菜單制作.ppt_第2頁
C語言的菜單制作.ppt_第3頁
C語言的菜單制作.ppt_第4頁
C語言的菜單制作.ppt_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、C語言的菜單制作,圖形化菜單,要完成一個菜單需要考慮以下幾個方面: 菜單的定義 保存部分屏幕 恢復(fù)期望的屏幕 用戶的響應(yīng)值傳遞,如何顯示菜單,可以利用輸出字符畫出主界面上的邊框和主菜單的背景區(qū)域。然后再顯示主菜單,最后畫出下拉菜單。(仿TC) 利用ASCII中的特殊字符。如218為,196為,179為,191為,192為,217為來畫出應(yīng)用程序的邊框。,菜單的定義,思考用什么來表示菜單及其子菜單?,Struct menu char name10 /*菜單名*/ char sub1020 /*下拉菜單*/ int n /*幾個選項*/ ,示例,system(cls); /*調(diào)用系統(tǒng)的清屏命令*/

2、 stdlib.h textbackground(BLUE);/*將文本背景設(shè)置為藍(lán)色*/ conio.h window(1,1,25,80); /*定義活動文本模式窗口*/ conio.h clrscr(); /*清除文本模式窗品*/ textx=3; texty=2; /*光標(biāo)初始化位置*/ gotoxy(1,2); /*在文本窗口中設(shè)置光標(biāo)*/ printf(%c,218); /*畫左上角*/ for(i=0;i78;i+) printf(%c,196); /*畫水平直線*/ printf(%c,191);/*畫右上角*/ for(i=3;i=23;i+) gotoxy(1,i); pr

3、intf(%c,179); /*畫垂直線*/ gotoxy(80,i); printf(%c,179); printf(%c,192); /*畫左下角*/ for(i=0;i78;i+) printf(%c,196); printf(%c,217); /*畫右下角*/ gotoxy(1,1); textcolor(7); /*設(shè)置文本顏色灰色*/ for(i=0;i80;i+) cprintf(%c,219);/*用符號實現(xiàn)畫主菜單的灰色背景區(qū)*/,Cprintf與printf,1.cprintf函數(shù)用于向當(dāng)前窗口輸出數(shù)據(jù),比如你用window函 數(shù)定義一個窗口 window(20,10,60

4、,20),那么當(dāng)你調(diào)用cprintf 函數(shù)時,cprintf的輸出就是相對于20,10, 60,20這個窗 口,當(dāng)輸出的字符串長度大于當(dāng)前窗口長度時,會在當(dāng)前窗 口自動換行。 2.cprintf函數(shù)可以配合setcolor,setbkcolor等函數(shù)使用,而調(diào) 用printf函數(shù)時會忽略這些 函數(shù)執(zhí)行的結(jié)果。,Cprintf和printf,比如執(zhí)行:setcolor(RED); cprintf(Hello world); printf(Hello); 將會在屏幕上顯示紅色字符串:Hello world 和白色字符串(因為setcolor函數(shù)對printf函數(shù)不起作用)Hello 在原來的C語言

5、中,cprintf中的c代表console,就是控制 臺.(conio.h中的con也是這個意思)到了windows也繼承了這 個淵源。 按照設(shè)計者本來的意圖,printf是標(biāo)準(zhǔn)輸出,就是指可以完 全不知道你輸出的對象,只是以標(biāo)準(zhǔn)的文本流方式輸出。 cprintf是與終端相關(guān)的,要用到一些系統(tǒng)平臺,硬件設(shè)備相關(guān)的 特性,所以可以有顏色等很多東西可供選擇,同時也削弱了移 植性,所以cprintf是非標(biāo)準(zhǔn)的。,定義菜單,在前面定義了表示菜單的結(jié)構(gòu)體?,F(xiàn)在需要定義具體的菜單。菜單項應(yīng)該放在結(jié)構(gòu)體數(shù)組中。如mainmenui就表示水平的第i個菜單(主菜單)為菜單的名字,而m

6、ainmenui.subj則表示第i個主菜單下的第j個下拉選項。,示例,void Selectitem() strcpy(,“File”); /*下面的具體選項補空格是為了各菜單黑色背景相同*/ strcpy(ml0.str0,“New ); strcpy(ml0.str1,“Load ); strcpy(ml0.str2,“Save ); strcpy(ml0.str3,Exit ); ml0.n=6; /*保存菜單的項數(shù)*/ . ,畫出菜單,定義了每一個具體的菜單項,現(xiàn)在需要把它們通通都顯示出來。對于正常菜單來說,顯示菜單灰底黑色且首字符為紅色的樣式,表示菜單未選中。但當(dāng)光

7、標(biāo)移動到某個菜單選項上時,則需要改變背景和文本顏色,以示該選項被選中。,示例,/*顯示主單名*/ void DrawSelectitem() for(i=0;i3;i+) RedText(i,1,); /*顯示主菜單名,且首字母為紅色*/ /*正常顯示菜單*/ void RedText(int x,int y,char *z) textbackground(7); /*設(shè)置背景顏色為淺灰色*/ gotoxy(3+x*20,y); for(j=0;zj;j+) if(j=0) textcolor(RED);/*第一個字母顯示紅色*/ else textcolor(BLACK);

8、/*設(shè)置黑色*/ cprintf(%c,zj); /*輸出菜單名*/ ,顯示選中的菜單示例,/*顯示選中菜單*/ void BlackText(int x,int y,char *z) textbackground(0); /*設(shè)置背景顏色為黑色*/ textcolor(15); /*設(shè)置文本顏色為白色*/ gotoxy(3+20*x,y);/*定位坐標(biāo)*/ cputs(z); /*輸出菜單名字符串*/ ,畫邊框和畫下拉菜單,為突出顯示菜單,需要為下拉菜單設(shè)定背景顏色和文本顏色,并填加邊框。設(shè)定邊框的左上角坐標(biāo)為l和u,右下角的坐標(biāo)為r和d。 注意:此邊框和前面畫的不一樣,前面是畫的整個應(yīng)用程

9、序的邊框。,/*畫邊框函數(shù)*/ void DrawFrame(int l,int u,int r,int d,int tcolor,int bcolor) textbackground(bcolor); /*背景顏色*/ textcolor(bcolor); /*文本顏色*/ for(i=l;i=r;i+) /*輸出背景區(qū)域*/ for(j=u;j=d;j+) gotoxy(i,j); printf(%c,219); /*輸出背景字符*/ textcolor(tcolor);/*邊框顏色*/ for(i=u+1;id;i+) /*在背景區(qū)域內(nèi)輸出邊框線*/ gotoxy(l,i); cprin

10、tf(%c,179); /*垂直線*/ gotoxy(r,i); cprintf(%c,179); for(i=l+1;ir;i+) gotoxy(i,u);cprintf(%c,196); /*水平線*/ gotoxy(i,d); cprintf(%c,196); gotoxy(l,u); cprintf(%c,218);/*左上角*/ gotoxy(r,u); cprintf(%c,191);/*右上角*/ gotoxy(l,d); cprintf(%c,192);/*左下角*/ gotoxy(r,d); cprintf(%c,217); /*右下角*/ ,畫下拉菜單,當(dāng)選擇了主菜單后,就

11、需要調(diào)用畫下拉菜單函數(shù)。首先保存當(dāng)前區(qū)域,以備將來恢復(fù),然后返選顯示主菜單,同時調(diào)用畫邊框函數(shù)顯示下拉菜單的邊框,在下拉菜單區(qū)域內(nèi)顯示各菜單選項,設(shè)置默認(rèn)選項為第一項,其余各項首字符為紅色。,/*顯示具體下拉選擇項目*/ void DrawMl(int n) gettext(1,1,80,25,save);/*保存被掩蓋的地方*/ BlackText(n,1,);/*反選顯示主菜單*/ DrawFrame(3+20*n-1,2,3+20*n+19,3+mln.n,0,7);/*下拉菜單的邊框*/ for(i=3;i3+mln.n;i+)/*輸出所選菜單各選項*/ if(i=3)

12、 BlackText(n,i,mln.stri-3);/*默認(rèn)選中第一項*/ else RedText(n,i,mln.stri-3);/*其余各項首字符紅色顯示*/ gotoxy(79,1); MoveMl(n,3);/*菜單選項的控制*/ ,菜單選項的控制,選擇菜單的時候,可以接受的鍵盤操作可以是水平方向和垂直方向。 當(dāng)所按鍵為: ESC鍵,恢復(fù)打開菜單前的界面,退出循環(huán)。 Left左光標(biāo)鍵,恢復(fù)打開當(dāng)前下拉菜單前的界面,顯示前一個下拉菜單,即取消當(dāng)前的下拉菜單,顯示新的下拉菜單。等等,最后一步了!,如何知用戶按了哪個鍵喃? 鍵盤的操作分兩類:一個是在屏幕編輯區(qū)的操作,另一個是在菜單區(qū)的操

13、作。 需要使用全局變量來記錄當(dāng)前光標(biāo)的位置。 需要具體定義某個鍵對應(yīng)的操作。 需要使用循環(huán)一直監(jiān)聽,直到用戶退出。,完整示例,Menu.c 同學(xué)們認(rèn)真研究一下再寫,函數(shù)名: bioskey 功 能: 直接使用BIOS服務(wù)的鍵盤接口 函數(shù)原型:int bioskey (int cmd) 說明:bioskey()的函數(shù)原型在bios.h中 bioskey()完成直接鍵盤操作,cmd的值決定執(zhí)行什么操作。 cmd = 0: 當(dāng)cmd是0,bioskey()返回下一個在鍵盤鍵入的 值(它將等待到按下一個鍵)。它返回一個16位的二進制數(shù),包 括兩個不同的值。當(dāng)按下一個普通鍵時,它的低8位數(shù)存放該字 符的ASCII碼,高8位存

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論