




已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C 語言圖形編程 一,字符屏幕一,屏幕操作函數(shù) 1. clrscr()清除字符窗口函數(shù) 2. window()字符窗口函數(shù) 3. gotoxy()光標(biāo)定位函數(shù) 4. clreol() 清除光標(biāo)行尾字符函數(shù) 5. insline() 插入空行函數(shù) 6. delline() 刪除一行函數(shù) 7. gettext() 拷進(jìn)文字函數(shù) 8. puttext() 拷出文字函數(shù) 9. movetext() 移動(dòng)文字函數(shù) 二,字符屬性函數(shù) 10. textmode() 文本模式函數(shù) 11. highvideo()高亮度函數(shù) 12. lowvideo() 低亮度函數(shù) 13. normvideo(void); 14. textcolor() 文本顏色函數(shù) 15. textattr() 文本屬性函數(shù) 16.textbackground() 文本背景函數(shù) 三, 屏顯狀態(tài)函數(shù) 17. wherex() 光標(biāo)處 x 坐標(biāo)函數(shù) 18. wherey() 光標(biāo)處 y 坐標(biāo)函數(shù) 19. gettextinfo() 獲取文本窗口信息函數(shù) 在 Borland C+里面提供了字符屏幕和圖形函數(shù).字符屏幕的核心是窗口(Window),它是屏幕的活動(dòng)部分,字符 輸出或顯示在活動(dòng)窗口中進(jìn)行.窗口在缺省時(shí),就是整個(gè)屏幕.窗口可以根據(jù)需要指定其大小.同樣,對圖形函 數(shù)的操作,也提供了(Viewport).也就是說圖形函數(shù)的操作都是在視口上進(jìn)行.圖形視口與字符窗口具有相同的 特性,用戶可以在屏幕上定義大小不同的視口,若不定義視口大小,它就是整個(gè)屏幕. 窗口是在字符屏幕下的概念,只有字符才能在窗口中顯示出來,這時(shí)用戶可以訪問的最小單位為一個(gè)字符. 視口是在圖形屏幕狀態(tài)下的概念,文本與圖形都可以在視口上顯示,用戶可訪問的最小單位是一個(gè)像素(像素這 一術(shù)語最初用來指顯示器上最小的,單獨(dú)的發(fā)光點(diǎn)單元.然而現(xiàn)在,其含義拓寬為指圖形顯示器上的最小可訪問 點(diǎn)). 字符和圖形狀態(tài)下,屏幕上的位置都是由它們的行與列所決定的.有一點(diǎn)須指出:字符狀態(tài)左上角坐標(biāo)為 (1,1),但圖形左上角坐標(biāo)為(0,0). 了解字符屏幕和圖形函數(shù)與窗口和視口的關(guān)系是很重要的.例如,字符屏幕 光標(biāo)位置函數(shù) gotoxy()將光標(biāo) 移到窗口的 x,y 位置上,這未必是相對于整個(gè)屏幕.下面介紹常用的幾類字符屏幕函數(shù)的功能用途,操作方法及 其例行程序. 一,屏幕操作函數(shù) 編寫程序繪圖經(jīng)常要用到對字符屏幕進(jìn)行操作.例如,在往屏幕上寫字符之前,首先要將屏幕清除干凈.又 如,有時(shí)需要在屏幕上多處寫上肉中刺樣的字符內(nèi)容,這時(shí)最好用屏幕拷貝來高效率地完成這一任務(wù).對這些操 作,Borland C+提供了一系列字符屏幕操作函數(shù)來實(shí)現(xiàn). 1. clrscr()清除字符窗口函數(shù) 功能:函數(shù) clrscr()清除整個(gè)當(dāng)前字符窗口,并且把光標(biāo)定位于左上角(1,1)處. 用法:此函數(shù)調(diào)用方式為 void clrscr(void); 說明:括號(hào)中 void 表示無參數(shù). 該函數(shù)相應(yīng)的頭文件為 conio.h 返回值:無 例:使用這個(gè)函數(shù)的例子見 4.clreol()函數(shù)的實(shí)例中. 2. window()字符窗口函數(shù) 功能: 函數(shù) window()用于在指定位置建立一個(gè)字符窗口. 用法: 此函數(shù)調(diào)用方式為 void window(int left,int top,int right,int bottom); 說明: 函數(shù)中參數(shù) left,top 為窗口左上角坐標(biāo);right,bottom 為其右下角坐標(biāo). 若有一個(gè)坐標(biāo)是無效的,則 window()函數(shù)不起作用.一旦該函數(shù)調(diào)用成功,那么所有定位坐標(biāo)都是相對 于窗口的,而不是相對于整個(gè)屏幕.但是建立窗口所用的坐標(biāo)總是相對整個(gè)屏幕的絕對坐標(biāo),而不是相對當(dāng)前窗 口的相對坐標(biāo).這樣用戶就可以根據(jù)各種需要建立多個(gè)互不嵌套的窗口. 此函數(shù)的頭文件為 conio.h. 返回值:無 例: 調(diào)用這個(gè)函數(shù)的實(shí)現(xiàn)例見 3.gotoxy()函數(shù)的例子中. 3. gotoxy()光標(biāo)定位函數(shù) 功能: 函數(shù) gotoxy()將字屏幕上的光標(biāo)移到當(dāng)前窗口指定的位置上. 用法: 這個(gè)函數(shù)調(diào)用方式為 void gotoxy(int x,int y); 說明: 括號(hào)里 x,y 是, 光標(biāo)定位的坐標(biāo),如果其中一個(gè)坐標(biāo)值無效(如坐標(biāo)超界),那么光標(biāo)不會(huì)移動(dòng). 此函數(shù)在字符狀態(tài)(有時(shí)稱為文本狀態(tài))下經(jīng)常用到 ,其相應(yīng)的頭文件為 conio.h 返回值:無 例: 下面程序建立兩個(gè)窗口,然后在窗口里顯示字符,字符的位置是調(diào)用該函數(shù)確定的. #i ncludeconio.h void border(int startx,int starty,int endx,int endy) register int i; gotoxy(1,1); for(i=0;i=endx-startx;i+) putch(-); gotoxy(1,endy-starty); for(i=0;i=endx-startx;i+) putch(-); for(i=2;i void main() register int i; gotoxy(6,8); printf(This is a test of the clreol() function.); getch(); gotoxy(6,8); clreol(); for(i=0;i20;i+) printf(Hellon); getch(); clrscr(); 5. insline() 插入空行函數(shù) 功能: 函數(shù) insline()插入一空行到當(dāng)前光標(biāo)所在行上,同時(shí)光標(biāo)以下的所有行都向下順移一行. 用法: 此函數(shù)的調(diào)用方式為 void insline(void); 說明: 該函數(shù)只用于文本方式,并且在當(dāng)了符窗口才有效. 這個(gè)函數(shù)的對應(yīng)頭文件是 conio.h 返回值:無 例: 程序給出了 insline()函數(shù)的用法. #i nclude conio.h void main() registser int i; clrscr(); for(i=1;i24;i+) gotoxy(1,i); printf(This is line %dn,i); getch(); gotoxy(1,10); insline(); getch(); 6. delline() 刪除一行函數(shù) 功能: 函數(shù) delline()刪除當(dāng)前窗口內(nèi)光標(biāo)所在行,同時(shí)把該行下面 所有行都上移一行. 用法: 此函數(shù)調(diào)用方式為 void delline(void); 說明: 注意,如果當(dāng)前窗口小于整個(gè)屏幕,那么該函數(shù)只影響到窗口內(nèi)的字符. 這個(gè)函數(shù)相應(yīng)的頭部文件是 conio.h 返回值: 無 例:先在屏幕上顯示 16 行文字,然后刪除第 4 行 #i nclude conio.h void main() register int i; clrscr(); for(i=0;i16;i+) printf(line %dn,i); getch(); gotoxy(1,4); delline(); getch(); 7.gettext() 拷進(jìn)文字函數(shù) 功能: 函數(shù) gettext()用于文本狀態(tài)下將屏幕上矩形域內(nèi)的文字拷進(jìn)內(nèi)存. 用法: 該函數(shù)調(diào)用方式為 int gettext(int left,int top,int right,int bottom,void *buffer); 說明: 函數(shù)中參數(shù) left,top 為矩形區(qū)域的左上角坐標(biāo),right,bottom 為其右下角坐標(biāo),這些坐標(biāo)是屏幕的絕對 坐標(biāo),不是窗口的相對坐標(biāo).buffer 指針必須指向一個(gè)足夠保存該矩形域內(nèi)文字的內(nèi)存.所用內(nèi)存大小按下式計(jì) 算: 點(diǎn)頭用字節(jié)數(shù)=矩形哉內(nèi)的行數(shù)矩形域的列數(shù)2 這里將行數(shù)乘以列數(shù)再乘以 2 的原因是保存屏幕上每個(gè)字符要用兩個(gè)字節(jié)存儲(chǔ)單元,一個(gè)字節(jié)存儲(chǔ)單元存放字符 本身,而另一個(gè)存放其屬性. 此函數(shù)相應(yīng)的頭文件是 conio.h 返回值: 若函數(shù)調(diào)用成功則返回 1,否則返順 0. 例: 把屏幕左上角點(diǎn)(1,1)和右下角點(diǎn)(10,10)的區(qū)域拷貝到 buf 指向的內(nèi)存中去. buf=(char *)malloc(10*10*2); if(!buf)gettext(1,1,10,10,buf); 8. puttext() 拷出文字函數(shù) 功能: 函數(shù) puttext()把先前由 gettext()保存到 buffer 指向的內(nèi)存中的文字拷出到屏幕上一個(gè)矩形區(qū)域中. 用法: 此函數(shù)調(diào)用方式為 int puttext(int left,int top,int right,int bottom,void *buffer); 說明: 函數(shù)里 left,top 為給出的屏幕上矩形區(qū)域的左上角點(diǎn),right,bottom 為其右下角點(diǎn),其坐標(biāo)是用屏幕的 絕對坐標(biāo),而不是用窗口的相對坐標(biāo). 該函數(shù)相應(yīng)的頭文件為 conio.h 返回值: 函數(shù)調(diào)用成功返回值為 1,否則返回 0. 例: 屏幕上某個(gè)區(qū)域內(nèi)容拷進(jìn) buf 指向的內(nèi)存中,然后又將這些文字拷出到屏幕上新位置. buf=(char *)malloc(10*10*2); gettext(1,1,10,10,buf); puttext(16,16,30,30,buf); 9. movetext() 移動(dòng)文字函數(shù) 功能: 函數(shù) movetext()將屏幕上一個(gè)矩形區(qū)域的文字移到另一個(gè)區(qū)域上. 用法: 該函數(shù)調(diào)用方式為 int movetext(int left,int top,int right,int bottom,int newleft,int newtop); 說明: 上面 left,top 為矩形區(qū)域上角坐標(biāo),right,bottom 為其右下角坐標(biāo),newleft,newright 為移動(dòng)到區(qū)域左 上角坐標(biāo).這些坐標(biāo)是屏幕的絕對坐標(biāo),不是窗口的相對坐標(biāo). 若要把屏幕上一段文字移到屏幕的另一位置,那么使用 movetext()函數(shù)比用 gettext()然后再用 puttext() 效率更高. 此函數(shù)相應(yīng)的頭文件是 conio.h 返回值: 如果有一個(gè)以上坐標(biāo)無效,那么函數(shù)返回值為 0,否則返回 1. 列: 把屏幕左上角點(diǎn)(8,8),右下角點(diǎn)(20,20)的矩形區(qū)域文字移動(dòng)到左上角點(diǎn)(10,10)的位置上: movetext(8,8,20,20,10,10); 10. textmode() 文本模式函數(shù) 功能: 函數(shù) textmode()針屏幕設(shè)置為文本模式(或者說字符狀態(tài)). 用法: 函數(shù)調(diào)用方式為 void textmode(int mode); 說明: 參數(shù) mode 必須為表 1-2 中所示的模式之一以用模式名(符號(hào)值),也可以用其等價(jià)的整數(shù)值. 表 1-2 文本模式 -模式名(符號(hào)值) 等價(jià)整數(shù)值 說 明 BW40 0 40 列黑白 C 40 1 40 列彩色 BW80 2 80 列黑白 C 80 3 80 列彩色 MONO 7 80 列單色 LASTMODE -1 上次模式 -調(diào)用該函數(shù)后,屏幕復(fù)位,并且所有字符的屬性恢復(fù)其缺省值. 此函數(shù)對應(yīng)的頭文件是 conio.h 返回值: 無 例: 把屏幕設(shè)置為 80 列彩色模式 textmode(C80); 二,字符屬性函數(shù) 用戶可以設(shè)置字符顯示的高亮度或低亮度的寫的符閃爍及其背景顏色等.具有這些操作的函數(shù)稱為字符屬性 函數(shù).除了僅支持單模式和單色的顯示卡外,字符屬性函數(shù)適用于其余所有的顯示卡. 11. highvideo()高亮度函數(shù) 功能: 函數(shù) highvideo()設(shè)置屏幕為高亮度顯示. 用法: 此函數(shù)調(diào)用方式為 void highvideo(void); 說明: 調(diào)用該函數(shù)后,寫到屏幕上的字符是高亮度的.此函數(shù)只適用于文本模式狀態(tài)(或說字符屏幕狀態(tài)). 這個(gè)函數(shù)對應(yīng)的頭文件為 conio.h 返回值: 無 例: 設(shè)置屏幕顯示為高亮度的. highvideo(); 12. lowvideo() 低亮度函數(shù) 功能: 函數(shù) lowvideo()設(shè)置屏幕為低亮度顯示. 用法: 該函數(shù)調(diào)用方式為 void lowvideo(void); 說明: 調(diào)用該函數(shù)后, 此時(shí)寫到屏幕上的字符是低亮度的. 這個(gè)函數(shù)只適用于文本模式狀態(tài)(或說字符屏幕狀態(tài)). 此函數(shù)相應(yīng)的頭文件是 conio.h 返回值: 無 例: 設(shè)置屏幕顯示為低亮度的 lowvideo(); 13. normvideo(void); 功能: 函數(shù) normvideo()設(shè)置屏幕為正常亮度顯示. 用法: 這個(gè)函數(shù)調(diào)用方式為 void normvideo(void); 說明: 調(diào)用該函數(shù)后,此時(shí)寫到屏幕上的字符是正常亮度的,該函數(shù)只適用于文本模式狀態(tài)(或說字符狀屏幕狀 態(tài)). 此函數(shù)相應(yīng)的頭文件為 conio.h 返回值: 無 例: 設(shè)置屏幕顯示為正常亮度. normvideo(); 14. textcolor() 文本顏色函數(shù) 功能: 函數(shù) textcolor()設(shè)置字符屏幕下文本顏色(或字符顏色),它也可以用于使字符閃爍. 用法: 這個(gè)函數(shù)調(diào)用方式為 void textcolor(int color); 說明: 函數(shù)中參數(shù) color 的有效值可取表 1-3 中的顏色名(即宏名)或等價(jià)值. 表 1-3 顏色名與等價(jià)值 -名 等價(jià)值 含 義 BLACK 0 黑 BLUE 1 藍(lán) GREEN 2 綠 CYAN 3 青 RED 4 紅 MAGENTA 5 洋紅 BROWN 6 棕 LIGHTGRAY 7 淡灰 DRAKGRAY 8 深灰 LIGHTBLUE 9 淡藍(lán) LIGHTGREEN 10 淡綠 LIGHTCYAN 11 淡青 LIGHTRED 12 淡紅 LIGHTMAGENTA 13 淡洋紅 YELLOW 14 黃 WHITE 15 白 BLINK 128 閃爍 -textcolor()函數(shù)執(zhí)行后,只影響其后輸出探險(xiǎn)符顏色,而不改變已經(jīng)在當(dāng)前屏幕上的其它字符顏色.顯然,如 果需要輸出的字符閃爍,只要將函數(shù)中參數(shù) color 取為 BLINK 即可,如果要使字符帶顏色閃爍,就必須將所選的 顏色值與 128 作或運(yùn)算. 此函數(shù)相應(yīng)的頭文件是 conio.h 返回值: 無 例: 下面程序段中第一條語句使輸出的字符閃爍,第三條語句使字符輸出為經(jīng)色同時(shí)閃爍: textcolor(BLINK); printf(hello); textcolor(RED|BLINK); 15. textattr() 文本屬性函數(shù) 功能: 函數(shù) textattr()用于設(shè)置文本屬性,即字符背景顏色,字符本身顏色和字符閃爍與否. 用法: 函數(shù)調(diào)用方式為 void textattr(int attribute); 說明: 設(shè)置字符背景顏色屬性字節(jié)的最簡單方法是,用所選的背景顏色值乘以 16 再與字符顏色值作按位或(OR) 運(yùn)算.例如需要紅色背景,綠色字符,就設(shè)置成 RED*16|GREEN,若還要字符閃爍,就把背景顏色值,字符顏色值 與閃爍值一起 按位作或運(yùn)算.如藍(lán)背景,黃字符且閃爍,就設(shè)置成為: YELLO|128|BLUE*16 第 0 位用于設(shè)置字符顏色. 此函數(shù)相應(yīng)的頭文件為 conio.h 返回值: 無 例: 設(shè)置背景為藍(lán)色,字符為紅色并且字符閃爍: textattr(RED|128|BLUE*16); 16.textbackground() 文本背景函數(shù) 功能: 函數(shù) textbackground()設(shè)置字符屏幕下文本背景顏色(或字符背景顏色). 用法: 此函數(shù)調(diào)用方式為 void textbackground(int bcolor); 說明: 參數(shù) bcolor 的有效值取表 1-4 背景顏色(即宏名)或等價(jià)值. 表 1-4 背景顏色與等價(jià)值 -背景顏色 等價(jià)值 含 義 -BLACK 0 黑 BLUE 1 藍(lán) GREEN 2 綠 CYAN 3 青 RED 4 紅 MAGENTA 5 洋紅 BROWN 6 棕 -調(diào)用該函數(shù)只影響后續(xù)寫的字符背景顏色,而不改變當(dāng)前顯示在屏幕上的字符背景顏色. 這個(gè)函數(shù)對應(yīng)的頭文件是 conio.h 返回值: 無 例: 設(shè)置文本背景顏色為藍(lán)色: textbackground(BLUE); 三, 屏顯狀態(tài)函數(shù) 這里提供三個(gè)在文本模式下屏幕顯示狀態(tài)的函數(shù) 17. wherex() 光標(biāo)處 x 坐標(biāo)函數(shù) 功能: 函數(shù) wherex()返回當(dāng)前窗口中光標(biāo)處橫向坐標(biāo). 用法: 此函數(shù)調(diào)用方式為 int wherex(void); 說明: 這個(gè)函數(shù)調(diào)用無參數(shù),其對應(yīng)的頭文件是 conio.h 返回值: 函數(shù)調(diào)用成功,返回光標(biāo)處 x 坐標(biāo)值. 例: 調(diào)用這個(gè)函數(shù)的實(shí)例見 18.wherey()函數(shù)的例中. 18. wherey() 光標(biāo)處 y 坐標(biāo)函數(shù) 功能: 函數(shù) wherey()返回當(dāng)前窗口中光標(biāo)處縱向坐標(biāo). 用法: 該函數(shù)調(diào)用方式為 int wherey(void); 說明: 此函數(shù)調(diào)用無參數(shù),其相應(yīng)的頭文件是 conio.h 返回值: 函數(shù)調(diào)用成功,返回光標(biāo)處 y 坐標(biāo)值. 例: 調(diào)作函數(shù) wherex()與 wherey(),返回當(dāng)前光標(biāo)處 x 坐標(biāo)與 y 坐標(biāo),并賦給整型變量 xpos ,ypos. int xpos,ypos; xpos=wherex(); ypos=wherey(); 19. gettextinfo() 獲取文本窗口信息函數(shù) 功能: 函數(shù) gettextinfo()獲取當(dāng)前文本窗口信息,并存放在實(shí)參結(jié)構(gòu)中. 用法: 函數(shù)調(diào)用方式為 void gettextinfo(struct text-info *info); 說明: 函數(shù)中參數(shù) info 為 struct text-info 結(jié)構(gòu)型指針,struct text-info 結(jié)構(gòu)在此函數(shù)相應(yīng)的頭文件中定 義為: struct text-info unsigned char winleft; / 窗口左上角 x 坐標(biāo) unsigned char wintop; / 窗口左上角 y 坐標(biāo) unsigned char winright; / 窗口右下角 x 坐標(biāo) unsigned char winbottom; / 窗口右下角 y 坐標(biāo) unsigned char attribute; / 文本屬性 unsigned char normattr; / 正常屬性 unsigned char currmode; / 當(dāng)前屏顯模式 unsigned char screenhight / 文本窗口高度(以行數(shù)計(jì)) unsigned char screenwidth; / 文本窗口寬度(以字符個(gè)數(shù)計(jì)) unsigned char curx; / 光標(biāo)處 x 坐標(biāo) unsigned char cury; / 光標(biāo)處 y 坐標(biāo) ; 記住,調(diào)用函數(shù) gettextinfo()時(shí),要傳遞 struct text-info 結(jié)構(gòu)型指針或該結(jié)構(gòu)的首地址,不要傳遞結(jié)構(gòu) 變量本身. 這個(gè)函數(shù)對應(yīng)的頭文件是 conio.h 返回值: 返回文本窗口角點(diǎn)坐標(biāo),高寬度,文本屬性等值,并存放在 info 所指向的結(jié)構(gòu)變量中. 例: 程序語句說明如何正確調(diào)用 gettextinfo()函數(shù): struct text-info win-status; gettextinfo(&win-status); 二,圖形顯示一,確定顯示卡 二,選擇顯示模式 三,圖形顯示 20. detectgraph() 顯示卡檢測函數(shù) 21. initgraph() 圖形初始化函數(shù) 22. getdrivername() 獲取圖形驅(qū)動(dòng)程序名的指針 23. getgraphmode() 獲取圖形模式函數(shù) 24. getmoderange()獲取模式值范圍函數(shù) 25. getmaxmode()獲取最大顯示模式函數(shù) 26. getmodename()獲取顯示模式名函數(shù) 27. graphdefaults()圖形設(shè)置復(fù)位缺省值函數(shù) 28. setgraphmode() 設(shè)置圖形模式函數(shù) 29. restorecrtmode() 恢復(fù)文本顯示模式函數(shù) 30. graphresult() 圖形操作結(jié)果函數(shù) 31. grpaherrormsg() 圖形錯(cuò)誤信息函數(shù) 32. setgraphbufsize()設(shè)置圖形緩沖區(qū)大小函數(shù) 33. setactivepage() 設(shè)置可輸出顯示頁函數(shù) 34. setvisualpage() 設(shè)置可見顯示頁數(shù) 35. closegraph()關(guān)閉圖形模式函數(shù) 一,確定顯示卡 微機(jī)系統(tǒng)顯示部分由顯示器(monitor)和顯示卡(adapter)兩部分組成.顯示器是獨(dú)立于主機(jī)的一種外部設(shè)備, 顯示卡或稱顯示適配卡,也有的稱圖形卡,是插在主機(jī)上的一塊電路板.但也有的顯示卡與主機(jī)板設(shè)計(jì)在一起. 顯示卡包括寄存器組,存儲(chǔ)器和控制電路三大部分.其中存儲(chǔ)器又包括顯示 RAM 和 ROM BIOS 兩部分,微機(jī)對顯 示屏幕的所有操作都是通過顯示卡來實(shí)現(xiàn)的.因此要進(jìn)行圖形顯示 ,首先要確定計(jì)算機(jī)上安裝的是何種顯示卡. 一種方法是詢問計(jì)算機(jī)或終端使用者,確定將要使用的顯示卡類型.這種方法很難,因?yàn)樯踔翆I(yè)程序員也不總 是能確定他正在使用什么樣的硬件.另一種方法是用軟件查詢硬件以識(shí)別當(dāng)前的配置.如果有一些識(shí)別硬件的標(biāo) 準(zhǔn),這就很簡單了.在 Borland C 中對現(xiàn)在所使用的各種顯示卡提供了支持,這只要調(diào)用 detectgraph()函數(shù)就 可以了,該函數(shù)為程序員確定計(jì)算機(jī)上使用的顯示卡類型. 二,選擇顯示模式 顯示模式是指顯示卡支持的分辨率與相應(yīng)的顏色配置.每臺(tái)計(jì)算機(jī)都配置了某種類型顯示卡,可以為該顯示 卡指定顯示模式. 三,圖形顯示 進(jìn)行圖形顯示首先要確定顯示卡,然后選擇其顯示模式.這些工作都可以調(diào)用圖形功能函數(shù)來完成,其實(shí)就 是把適合于顯示卡的圖形驅(qū)動(dòng)程序裝入內(nèi)存.如果圖形驅(qū)動(dòng)程序未裝入內(nèi)存,那么圖形函數(shù)就不能操作. 20. detectgraph() 顯示卡檢測函數(shù) 功能: 函數(shù) detectgraph()在計(jì)算機(jī)上安裝有顯示卡的情況下,測定其顯示卡的類型. 用法: 此函數(shù)調(diào)用方式為 void detectgraph(int *driver,int *mode); 說明: 函數(shù)把 driver 所指向的整型變量設(shè)置為圖形驅(qū)動(dòng)程序的代碼,把 mode 所指向的整型變量設(shè)置為顯示卡 支持的最高有效模式(即該顯示卡能支持的最高分辨率). 該函數(shù)相應(yīng)的頭文件為 graphics.h 返回值: 返回適合于該顯示卡的圖形驅(qū)動(dòng)程序的代碼(也稱等價(jià)值),并存放在 driver 指向的變量中.若計(jì)算機(jī) 系統(tǒng)中無圖形硬件,則由 driver 指向的變量設(shè)置為-2. 例: 檢測計(jì)算機(jī)是否裝有顯示卡: int driver,mode; detectgraph(&driver,&mode); if(driver=-2) printf(no graphics adapter in the computer); exit(1); 21. initgraph() 圖形初始化函數(shù) 功能: 函數(shù) initgraph()用于初始化圖形系統(tǒng), 把適合的圖形驅(qū)動(dòng)程序裝入內(nèi)存, 設(shè)置圖形函數(shù)所用的顯示模式. 用法: 該函數(shù)調(diào)用方式為 void initgraph(int *driver,int *mode,char *path); 說明: 1) 函數(shù)中參數(shù) driver 指向圖形驅(qū)動(dòng)程序(或者等價(jià)值). 在頭部文件 graphics.h 中定義了圖形驅(qū)動(dòng)程序的宏名與其等價(jià) ,如下: 宏 名 等價(jià)值 -DETECT 0 CGA 1 MCGA 2 EGA 3 EGA64 4 EGAMONO 5 IBM8514 6 HERCMONO 7 ATT400 8 VGA 9 PC3270 10 -注:在現(xiàn)在的計(jì)算機(jī)中,上表中的許多顯示卡已經(jīng)過時(shí),不再使用. 這樣就不必?fù)?dān)心圖形驅(qū)動(dòng)程序的準(zhǔn)確名字, 而只要用其等價(jià)值即可, 若使用 detect(即等價(jià)值 0)時(shí), initgraph() 函數(shù)自動(dòng)檢測當(dāng)前計(jì)算機(jī)中裝有的顯示卡類型,并且選用最大分辨率的顯示模式. 2)參數(shù) mode 指向顯示模式或用等價(jià)值(風(fēng)表 1-5),mode 所指的值必須是有效模式之一. 3)參數(shù) path 指向圖形驅(qū)動(dòng)程序所在的路徑,例如 path=C:TCBG1.若沒有指定路徑,就在當(dāng)前目錄下尋找. 一般圖形驅(qū)動(dòng)程序包含在.BGI 文件中,這些文件是系統(tǒng)可以得到的.這個(gè)函數(shù)對應(yīng)的頭文件是 graphics.h. 返回值: 無 例: 調(diào)用 initgraph()自動(dòng)檢測硬件圖形系統(tǒng),并選用最大分辨率顯示模式. init drver,mode; driver=DETECT; mode=0; initgraph(&driver,&mode,); 22. getdrivername() 獲取圖形驅(qū)動(dòng)程序名的指針 功能: 函數(shù) getdrivername()返回指向當(dāng)前圖形驅(qū)動(dòng)程序名的指針. 用法: 此函數(shù)調(diào)用方式為 char *getdrivername(void); 說明: 本函數(shù)可以用來檢測顯示卡,但只能在 initgraph()設(shè)置圖形驅(qū)動(dòng)程序和顯示模式之后調(diào)用. 該函數(shù)相應(yīng)的頭文件為 graphics.h 返回值: 返回一指針,指向含有當(dāng)前圖形驅(qū)動(dòng)程序名的字符串. 例: 顯示當(dāng)前圖形驅(qū)動(dòng)程序名: #i nclude #i nclude void main() int graphdriver=DETECT,graphmode; char *s; initgraph(&graphdriver,&graphmode,); s=getdrivername(); outtext(Using driver:); outtext(s); getch(); closegraph(); 23. getgraphmode() 獲取圖形模式函數(shù) 功能: 函數(shù) getgrapgmode()返回當(dāng)前圖形模式. 用法: 該函數(shù)調(diào)用方式為 int getgraphmode(void); 說明: getgraphmode()函數(shù)無參數(shù)調(diào)用. 這個(gè)函數(shù)對應(yīng)的頭文件是 graphics.h 返回值: 返回 initgraph()或 setgraphmode()所設(shè)置的當(dāng)前圖形模式值. 例: 顯示當(dāng)前圖形模式的代碼: printf(graphics mode is %d,getgraphmode(); 24. getmoderange()獲取模式值范圍函數(shù) 功能: 函數(shù) getmoderange()返回指定的圖形驅(qū)動(dòng)程序能夠支持的最低和最高模式值. 用法: 函數(shù)調(diào)用方式為 void getmoderange(int driver,int *lowmode,int himode); 說明: 參數(shù) driver 是用來調(diào)用此函數(shù)時(shí),指定圖形驅(qū)動(dòng)程序等價(jià)值或宏名. 其有效值如下: -宏 名 等價(jià)值 -DETECT 0 CGA 1 MCGA 2 EGA 3 EGA64 4 EGAMONO 5 IBM8514 6 HERCMONO 7 ATT400 8 VGA 9 PC3270 10 -注:上表中的許多顯示卡在現(xiàn)在的計(jì)算機(jī)上已經(jīng)過時(shí),僅作參考. 該函數(shù)想應(yīng)的頭文件為 graphics.h 返回值: 返回的最小和最大有效值存放在參數(shù)指針 lowmode 和 himode 分別指向的整型變量中. 例: 顯示當(dāng)前圖形硬件的顯示模式的范圍值: #i ncludegraphics.h void main() int driver,mode; int low,high; mode=0; initgraph(&driver,&mode,); getmoderange(driver,&low,&high); printf(mode range:%d-%d,low,high); getch(); rstorecrtmode(); 25. getmaxmode()獲取最大顯示模式函數(shù) 功能: 函數(shù) getmaxmode()返回當(dāng)前加載的圖形驅(qū)動(dòng)程序所支持的最大有效顯示模式. 用法: 函數(shù)調(diào)用方式為 int getmaxmode(void); 說明: 本函數(shù)無參數(shù)調(diào)用, 返回圖形驅(qū)動(dòng)程序所支持的最大顯示模式, 所有圖形驅(qū)動(dòng)程序支持從 0 到 getmaxmode() 函數(shù)返回值中的任一整 數(shù)值(對應(yīng)的顯示模式). 這個(gè)函數(shù)對應(yīng)的頭文件是 graphics.h 返回值:返回圖形驅(qū)動(dòng)程序所支持的顯示模式最大值. 例: 顯示當(dāng)前最大顯示模式: printf(The maxmode of this driver is %dn,getmaxmode(); 26. getmodename()獲取顯示模式名函數(shù) 功能: 函數(shù) getmodename()可獲取當(dāng)前圖形驅(qū)動(dòng)程序支持的指定顯示模式的名字. 用法: 此函數(shù)調(diào)用方式為 char *getmodename(int modecode); 說明: 參數(shù) modecode 為整型值.用以指定一顯示模式值調(diào)用該函數(shù). 這個(gè)函數(shù)對應(yīng)的頭文件 graphics.h 返回值: 返回指定模式值的顯示模式名. 例: 顯示當(dāng)前最大顯示模式名: #i nclude #i nclude void main() int graphdriver=DETECT,graphmode; int modecode; char *s; initgraph(&graphdriver,&graphmode,); modecode=getmaxmode(); s=getmodename(modecode); outtext(The maxmode name is:); outtext(s); getch(); closegraph(); 27. graphdefaults()圖形設(shè)置復(fù)位缺省值函數(shù) 功能: 函數(shù) grpahdefaults()把所有圖形設(shè)置復(fù)位為它們的缺省值,這包括把圖形視口復(fù)位為全屏幕;當(dāng)前位置 定位在 0,0;調(diào)色板,背景色和繪圖色都被復(fù)位;填充顏色,填 充圖樣,文本文字和排齊方式都返回到它位的缺 省值. 用法: 此函數(shù)調(diào)用方式為 void graphdefaults(void); 說明: 該函數(shù)無參數(shù)調(diào)用. 這個(gè)函數(shù)相應(yīng)的頭文件為 graphics.h 返回值: 無 例: 將圖形系統(tǒng)恢復(fù)為其缺省值: graphdefaults(); 28. setgraphmode() 設(shè)置圖形模式函數(shù) 功能: 函數(shù) setgraphmode()用當(dāng)前圖形驅(qū)動(dòng)程序有效的圖形模式調(diào)用,一旦被調(diào)用,setgraphmode()選擇一 個(gè)新的圖形模式.注意,圖形顯示模式必須事先由 initgraph()初始化. 用法: 該函數(shù)調(diào)用方式為 void setgraphmode(int mode); 說明: 參數(shù) mode 調(diào)用時(shí)為指定的模式值. 此函數(shù)相應(yīng)的頭部文件是 graphics.h 返回值: 無 例: 把 VGA 圖形卡設(shè)置為 VGAMED 模式: setgraphmode(VGAMED); / 圖形系統(tǒng)已經(jīng)初始化 29. restorecrtmode() 恢復(fù)文本顯示模式函數(shù) 功能: 函數(shù) restrecrtmode()將顯示模式恢復(fù)到調(diào)用 initgraph()時(shí)檢測出的初始文本模式. 用法: 這個(gè)函數(shù)調(diào)用方式為 void restorecrtmode(void); 說明: 函數(shù) restorecrtmode()和 setgraphmode()函數(shù)一起使用,可以實(shí)現(xiàn)文本與圖形顯示之間的切換. 此函數(shù)對應(yīng)的頭文件為 graphics.h 返回值: 無 例: 恢復(fù)顯示模式為初始文本模式: restorecrtmode(); 30. graphresult() 圖形操作結(jié)果函數(shù) 功能: 函數(shù) graphresult()函數(shù)返回最后一次圖形操作的代碼. 用法: 此函數(shù)調(diào)用方式為 int graphresult(void); 說明: C 為圖形設(shè)置了代碼,它們是從-15 到 0 的整數(shù)值.其含義見表 1-6. 調(diào)用該函數(shù)時(shí),出錯(cuò)狀態(tài)被復(fù)位為 0,所以返回值(代碼)最好存于變量中,以供需要時(shí)檢測, 進(jìn)行下一步圖形操作. 圖形操作信息名稱 grInvalidDeviceNum grInvalidFont grIOerror grError grInvalidMode grNoFontMem grFontNotFound grNoFloadMem grNoScanMem grNoLoadMem grInvalidDriver grFileNoFound grNoDetected grNoInitGraph grOK 代碼 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 含 義 無效設(shè)備號(hào) 無效字體文件 輸入輸出錯(cuò)誤 一般圖形錯(cuò)誤 無效的圖形模式 沒有足夠內(nèi)存用于裝字體文件 沒有找到字體文件 Flood 填 充內(nèi)存不足 Scan 填 充內(nèi)存不足 沒有足夠內(nèi)存裝入圖形驅(qū)動(dòng)程序 無效圖形驅(qū)動(dòng)程序 沒有找到圖形驅(qū)動(dòng)文件 沒有檢測到圖形硬件 沒有圖形初始化 成功 這個(gè)函數(shù)對應(yīng)的頭部文件是 graphics.h 返回值: 返回最后一次圖形操作結(jié)果相應(yīng)的代碼. 例: 調(diào)用 graphresult()函數(shù)的實(shí)例見下面 grapherrormsg()函數(shù)的例子. 31. grpaherrormsg() 圖形錯(cuò)誤信息函數(shù) 功能: 函數(shù) grapherrormsg()返回指向出錯(cuò)代碼相應(yīng)的錯(cuò)誤信息字符串的指針. 用法: 此函數(shù)調(diào)用方式為 char *grapherrormsg(int errcode); 說明: 參數(shù) errcode 值,即出錯(cuò)代碼由調(diào)用函數(shù) graphresult()獲得.這里所有出錯(cuò)代碼及相應(yīng)的錯(cuò)誤信息如表 1-6 中所述. 該函數(shù)相應(yīng)的頭文件是 grpahics.h 返回值: 返回一個(gè)指向該出錯(cuò)代碼相應(yīng)的錯(cuò)誤信息字符串的指針. 例: 用文字形式顯示有關(guān)出錯(cuò)代碼相應(yīng)的錯(cuò)誤信息: int errorcode; errorcode=graphresult(); printf(%s,grapherrormsg(errcode); 32. setgraphbufsize()設(shè)置圖形緩沖區(qū)大小函數(shù) 功能: 函數(shù) setgraphbufsize()用來設(shè)置有的圖形函數(shù)(如 floodfill 等)所要用到的內(nèi)存緩沖區(qū)大小. 用法: 函數(shù)調(diào)用方式為 unsigned setgraphbufsize(unsigned bufsize); 說明: 這里無符號(hào)參數(shù) bufsize 為所設(shè)置的緩沖區(qū)大小. 一般不需要用到該函數(shù), 僅使用由 initgraph()函數(shù)產(chǎn)生的內(nèi)存緩沖區(qū)就夠了, 緩沖區(qū)大小缺省時(shí)為 4KB(即 4096 個(gè)字節(jié)), 足以用來填 充一個(gè)大約有 650 個(gè)頂點(diǎn)的多邊形, 但是為了節(jié)省內(nèi)存, 用戶可以減少緩沖區(qū)的大小, 或 者 由 于 需 要 更 多 的 緩 沖 區(qū) 內(nèi) 存 , 這 時(shí) 可 用 函 數(shù) setgraphbufsize() 來 增 加 緩 沖 區(qū) 大 小 . 注 意 , 使 用 setgraphbufsize()函數(shù)必須在調(diào)用 initgraph()之前. 返回值: 返回先前定義的圖形緩沖區(qū)字節(jié)數(shù). 例: 調(diào)用此函數(shù)設(shè)置圖形緩沖區(qū)為 8KB 字節(jié): setgraphbufsize(0x2000); 33. setactivepage() 設(shè)置可輸出顯示頁函數(shù) 功能: 函數(shù) setactiveage()設(shè)置用作圖形輸出的顯示頁. 用法: 這個(gè)函數(shù)調(diào)用方式為 void setactivepage(int pagenum); 說明: 參數(shù) pagenum 為選擇的顯示頁號(hào),如果調(diào)用成功,那么后續(xù)圖形輸出就寫到選定的輸出頁上.缺省時(shí)是 以 0 頁作為當(dāng)前輸出頁.該函數(shù)只在圖形驅(qū)動(dòng)程序及其顯示模式支持多個(gè)顯示頁時(shí)才起作用. 此函數(shù)相應(yīng)的頭文件為 graphics.h 返回值: 無 例: 設(shè)置 1 頁為輸出顯示頁: setactivepage(1); 34. setvisualpage() 設(shè)置可見顯示頁數(shù) 功能: 函數(shù) setvisualpage()設(shè)置屏幕上可見的顯示頁. 用法: 函數(shù)調(diào)用方式為 void setvisualpage(int pagenum); 說明:參數(shù) pagenum 為設(shè)置的顯示頁號(hào). 缺省時(shí)是以 0 頁作為當(dāng)前可見頁. 調(diào)用這個(gè)函數(shù)和調(diào)用 setactivepage() 一樣,僅在圖形驅(qū)動(dòng)程序及其顯示模式支持多個(gè)顯示頁時(shí)才有效.用戶可以用系統(tǒng)所支持的任何顯示頁,在它們 之間切換, 當(dāng)然一次只能有一個(gè)顯示頁在屏幕上可見, 有時(shí)需要在一頁上建立后備圖形葨圖像, 它在當(dāng)時(shí)不顯示, 一旦需要時(shí),可以馬上切換到該頁,如要實(shí)現(xiàn)動(dòng)畫效果,只需切換顯示頁號(hào)即可.用 setvisualpage()函數(shù)選 定 實(shí)際顯示在屏幕上的可見頁,用 setactivepage()函數(shù)選擇當(dāng)前圖形輸出頁,從而實(shí)現(xiàn)圖形頁之間的顯示切換, 通常這兩個(gè)函數(shù)都是缺省的,這時(shí)輸出頁就是可見頁.若不繪制動(dòng)畫就不需要用到這兩個(gè)函數(shù). 這兩個(gè)函數(shù)對應(yīng)的頭文件是 graphics.h 返回值: 無 例: 設(shè)置可見頁為第 1 頁: setvisualpage(1); 35. closegraph()關(guān)閉圖形模式函數(shù) 功能: 函數(shù) closegraph()將系統(tǒng)圖形模式關(guān)閉,復(fù)位到 initgraph()初始文本模式,并且釋放圖形驅(qū)動(dòng)程序, 字體和內(nèi)部緩沖區(qū)所占用的系統(tǒng)內(nèi)存. 用法: 這個(gè)函數(shù)調(diào)用方式為 void closegraph(void); 說明: 當(dāng)用戶的程序既用到圖形輸出又用到非圖形輸出時(shí),應(yīng)該調(diào)用此函數(shù).特別是程序多次調(diào)用 initgraph() 函數(shù)的情況,要相應(yīng)地調(diào)用 closegraph 函數(shù),釋放調(diào)用 initgraph()所占用的內(nèi)存,否則內(nèi)存很快就滿了,程序 無法運(yùn)行,如果程序結(jié)束,也可以用 restorecrtmode()函數(shù)代替該函數(shù),這樣任何分配的內(nèi)存都將釋放. 此函數(shù)對應(yīng)的頭文件是 graphics.h 返回值: 無 例: 關(guān)閉圖形系統(tǒng): closegraph(); 三,繪圖函數(shù)-01 繪圖函數(shù)一,屏幕和視口設(shè)置與清除函數(shù) 36. setviewport() 設(shè)置圖形視口函數(shù) 37. clearviewport()清除圖形視口函數(shù) 38. cleardevice() 清除屏幕函數(shù) 39. getviewsettings() 獲取圖形視口設(shè)置函數(shù) 二,調(diào)色板和顏色函數(shù) 40. setpalette()設(shè)置調(diào)色板函數(shù) 41. setallpalette()設(shè)置整個(gè)調(diào)色板函 42. setbackcolor() 設(shè)置背景顏色函數(shù) 43. setcolor() 設(shè)置顏色函數(shù) 44. getbkcolor() 返回背景色函數(shù) 45. getcolor() 返回當(dāng)前繪圖顏色 46. getmaxcolor()返回最大顏色值函數(shù) 47. getpalette() 獲取調(diào)色板函數(shù) 48. getpalettesize() 返回調(diào)色板大小函數(shù) 49. getdefaultpalette() 獲取缺省調(diào)色板函數(shù) 三,屏幕位置函數(shù) 50. getmaxx()返回最大 x 坐標(biāo)函數(shù) 51. getmaxy() 返回最大 y 坐標(biāo)函數(shù) 52. getx() 返回 x 坐標(biāo)函數(shù) 53. gety() 返回 y 坐標(biāo)函數(shù) 54. moveto()函數(shù) 55. moverel() 相對移動(dòng)函數(shù) Borland C+提供了一整套綜合性的圖形函數(shù),上節(jié)介紹了其中有關(guān)圖形顯示的函數(shù),本節(jié)介紹其中的繪圖函數(shù), 下節(jié)將介紹它的圖形文本函數(shù). 一般繪圖時(shí),首先要清除屏幕,設(shè)置圖形視口,設(shè)置繪圖顏色,然后在屏幕上某個(gè)位置畫點(diǎn)或直線或曲線等. 下面給出具有這些功能的函數(shù). 一,屏幕和視口設(shè)置與清除函數(shù) 36. setviewport() 設(shè)置圖形視口函數(shù) 功能: 函數(shù) setviewport() 設(shè)置當(dāng)前圖形視口. 用法: 函數(shù)調(diào)用方式為 void setviewport(int left,int top,int right,int bottom,int clip); 說明: 參數(shù) left,top 是左上角坐標(biāo),right,bottom 是右
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧省丹東市五校協(xié)作體2025屆高三12月考-化學(xué)試題(含答案)
- 初中數(shù)學(xué)第四章 三角形單元復(fù)習(xí)題2024-2025學(xué)年北師大版七年級(jí)數(shù)學(xué)下冊
- 2《合理利用網(wǎng)絡(luò)》表格式公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)-3
- 藏族民間舞蹈的文化特征
- 化工安全作業(yè)票培訓(xùn)講座
- 臨時(shí)工勞務(wù)派遣合同模板
- 員工服務(wù)合同協(xié)議書
- 人防工程專業(yè)分包合同
- 2025耕地流轉(zhuǎn)合同范本
- 2025年勞動(dòng)合同書范本
- 蜜雪冰城工商大學(xué)店開店方案設(shè)計(jì)
- 毛澤東詩詞賞析
- 《我國中小企業(yè)融資的現(xiàn)狀、問題及完善對策研究-S高科技公司為例》12000字(論文)
- 灼口綜合征護(hù)理
- 【碳足跡報(bào)告】山東金拓?zé)崮芸萍加邢薰井a(chǎn)品碳足跡報(bào)告
- 小孩進(jìn)入廠區(qū)安全免責(zé)協(xié)議書(2篇)
- 讀書分享讀書交流會(huì)《基督山伯爵》課件
- VTE評(píng)分量表解讀 課件2024.8
- 2023年12月英語六級(jí)真題及答案-第3套
- 《文化學(xué)概論》第三章-文化的起源及其發(fā)展-38
- 2024年四川省成都市中考地理+生物試卷真題(含答案解析)
評(píng)論
0/150
提交評(píng)論