C屏幕、圖形操作函數(shù)_第1頁(yè)
C屏幕、圖形操作函數(shù)_第2頁(yè)
C屏幕、圖形操作函數(shù)_第3頁(yè)
C屏幕、圖形操作函數(shù)_第4頁(yè)
C屏幕、圖形操作函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、屏幕操作函數(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() 文本

2、顏色函數(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ù)需要指定其大小。同樣,對(duì)圖形函數(shù)的操作,也提供了(Viewport)。也就是說(shuō)圖形函數(shù)的操作都是在視口上進(jìn)行。圖形視口與字符窗口具有相同的特性,用

3、戶可以在屏幕上定義大小不同的視口,若不定義視口大小,它就是整個(gè)屏幕。 窗口是在字符屏幕下的概念,只有字符才能在窗口中顯示出來(lái),這時(shí)用戶可以訪問(wèn)的最小單位為一個(gè)字符。視口是在圖形屏幕狀態(tài)下的概念,文本與圖形都可以在視口上顯示,用戶可訪問(wèn)的最小單位是一個(gè)像素(像素這一術(shù)語(yǔ)最初用來(lái)指顯示器上最小的、單獨(dú)的發(fā)光點(diǎn)單元。然而現(xiàn)在,其含義拓寬為指圖形顯示器上的最小可訪問(wèn)點(diǎn))。 字符和圖形狀態(tài)下,屏幕上的位置都是由它們的行與列所決定的。有一點(diǎn)須指出:字符狀態(tài)左上角坐標(biāo)為(1,1),但圖形左上角坐標(biāo)為(0,0)。 了解字符屏幕和圖形函數(shù)與窗口和視口的關(guān)系是很重要的。例如,字符屏幕 光標(biāo)位置函數(shù)gotoxy()

4、將光標(biāo)移到窗口的x,y位置上,這未必是相對(duì)于整個(gè)屏幕。下面介紹常用的幾類字符屏幕函數(shù)的功能用途、操作方法及其例行程序。一、屏幕操作函數(shù) 編寫(xiě)程序繪圖經(jīng)常要用到對(duì)字符屏幕進(jìn)行操作。例如,在往屏幕上寫(xiě)字符之前,首先要將屏幕清除干凈。又如,有時(shí)需要在屏幕上多處寫(xiě)上肉中刺樣的字符內(nèi)容,這時(shí)最好用屏幕拷貝來(lái)高效率地完成這一任務(wù)。對(duì)這些操作,Borland C+提供了一系列字符屏幕操作函數(shù)來(lái)實(shí)現(xiàn)。1. clrscr()清除字符窗口函數(shù)功能:函數(shù)clrscr()清除整個(gè)當(dāng)前字符窗口,并且把光標(biāo)定位于左上角(1,1)處。用法:此函數(shù)調(diào)用方式為 void clrscr(void);說(shuō)明:括號(hào)中void 表示無(wú)參

5、數(shù)。 該函數(shù)相應(yīng)的頭文件為conio.h返回值:無(wú)例:使用這個(gè)函數(shù)的例子見(jiàn)4.clreol()函數(shù)的實(shí)例中。2. window()字符窗口函數(shù)功能: 函數(shù)window()用于在指定位置建立一個(gè)字符窗口。用法: 此函數(shù)調(diào)用方式為 void window(int left,int top,int right,int bottom);說(shuō)明: 函數(shù)中參數(shù)left,top為窗口左上角坐標(biāo);right,bottom為其右下角坐標(biāo)。 若有一個(gè)坐標(biāo)是無(wú)效的,則window()函數(shù)不起作用。一旦該函數(shù)調(diào)用成功,那么所有定位坐標(biāo)都是相對(duì)于窗口的,而不是相對(duì)于整個(gè)屏幕。但是建立窗口所用的坐標(biāo)總是相對(duì)整個(gè)屏幕的絕對(duì)坐

6、標(biāo),而不是相對(duì)當(dāng)前窗口的相對(duì)坐標(biāo)。這樣用戶就可以根據(jù)各種需要建立多個(gè)互不嵌套的窗口。 此函數(shù)的頭文件為conio.h。返回值:無(wú)例: 調(diào)用這個(gè)函數(shù)的實(shí)現(xiàn)例見(jià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);說(shuō)明: 括號(hào)里x,y是, 光標(biāo)定位的坐標(biāo),如果其中一個(gè)坐標(biāo)值無(wú)效(如坐標(biāo)超界),那么光標(biāo)不會(huì)移動(dòng)。 此函數(shù)在字符狀態(tài)(有時(shí)稱為文本狀態(tài))下經(jīng)常用到 ,其相應(yīng)的頭文件為conio.h返回值:無(wú)例: 下面程序建立兩個(gè)窗口,然后在窗口里

7、顯示字符,字符的位置是調(diào)用該函數(shù)確定的。#includeconio.hvoid 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;ivoid main() register int i; gotoxy(6,8); printf(This is a test of the clreol()

8、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);說(shuō)明: 該函數(shù)只用于文本方式,并且在當(dāng)了符窗口才有效。 這個(gè)函數(shù)的對(duì)應(yīng)頭文件是 conio.h返回值:無(wú)例: 程序給出了insline()函數(shù)的用法。#include conio.hvoid main() regi

9、stser 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);說(shuō)明: 注意,如果當(dāng)前窗口小于整個(gè)屏幕,那么該函數(shù)只影響到窗口內(nèi)的字符。 這個(gè)函數(shù)相應(yīng)的頭部文件是conio.h返回值: 無(wú)例:先在屏幕上顯示16行文字,然后刪除第

10、4行#include conio.hvoid 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);說(shuō)明: 函數(shù)中參數(shù)left,top為矩形區(qū)域的左上角坐標(biāo),right

11、,bottom為其右下角坐標(biāo),這些坐標(biāo)是屏幕的絕對(duì)坐標(biāo),不是窗口的相對(duì)坐標(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

12、,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);說(shuō)明: 函數(shù)里left,top為給出的屏幕上矩形區(qū)域的左上角點(diǎn),right,bottom為其右下角點(diǎn),其坐標(biāo)是用屏幕的絕對(duì)坐標(biāo),而不是用窗口的相對(duì)坐標(biāo)。 該函數(shù)相應(yīng)的頭文件為conio.h返回值: 函數(shù)調(diào)用成功返回值為1,否則返回0。例: 屏幕上某個(gè)區(qū)域內(nèi)容拷進(jìn)buf指

13、向的內(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);說(shuō)明: 上面left,top為矩形區(qū)域上角坐標(biāo),right,bottom為其右下角坐標(biāo),newleft

14、,newright為移動(dòng)到區(qū)域左上角坐標(biāo)。這些坐標(biāo)是屏幕的絕對(duì)坐標(biāo),不是窗口的相對(duì)坐標(biāo)。 若要把屏幕上一段文字移到屏幕的另一位置,那么使用movetext()函數(shù)比用gettext()然后再用puttext()效率更高。 此函數(shù)相應(yīng)的頭文件是conio.h返回值: 如果有一個(gè)以上坐標(biāo)無(wú)效,那么函數(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è)置為文本模式(或者說(shuō)字符狀態(tài))。用法

15、: 函數(shù)調(diào)用方式為 void textmode(int mode);說(shuō)明: 參數(shù)mode必須為表1-2中所示的模式之一以用模式名(符號(hào)值),也可以用其等價(jià)的整數(shù)值。表1-2 文本模式-模式名(符號(hào)值) 等價(jià)整數(shù)值 說(shuō) 明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ù)對(duì)應(yīng)的頭文件是conio.h返回值: 無(wú)例: 把屏幕設(shè)置為80列彩色模式 textmode(C80);二、字符屬性函數(shù) 用戶可以設(shè)置字符顯示的高亮度或低亮度的寫(xiě)

16、的符閃爍及其背景顏色等。具有這些操作的函數(shù)稱為字符屬性函數(shù)。除了僅支持單模式和單色的顯示卡外,字符屬性函數(shù)適用于其余所有的顯示卡。11. highvideo()高亮度函數(shù)功能: 函數(shù)highvideo()設(shè)置屏幕為高亮度顯示。用法: 此函數(shù)調(diào)用方式為void highvideo(void);說(shuō)明: 調(diào)用該函數(shù)后,寫(xiě)到屏幕上的字符是高亮度的。此函數(shù)只適用于文本模式狀態(tài)(或說(shuō)字符屏幕狀態(tài))。 這個(gè)函數(shù)對(duì)應(yīng)的頭文件為 conio.h返回值: 無(wú)例: 設(shè)置屏幕顯示為高亮度的。 highvideo();12. lowvideo() 低亮度函數(shù)功能: 函數(shù)lowvideo()設(shè)置屏幕為低亮度顯示。用法:

17、該函數(shù)調(diào)用方式為void lowvideo(void);說(shuō)明: 調(diào)用該函數(shù)后,此時(shí)寫(xiě)到屏幕上的字符是低亮度的。這個(gè)函數(shù)只適用于文本模式狀態(tài)(或說(shuō)字符屏幕狀態(tài))。 此函數(shù)相應(yīng)的頭文件是 conio.h返回值: 無(wú)例: 設(shè)置屏幕顯示為低亮度的 lowvideo();13. normvideo(void);功能: 函數(shù)normvideo()設(shè)置屏幕為正常亮度顯示。用法: 這個(gè)函數(shù)調(diào)用方式為void normvideo(void);說(shuō)明: 調(diào)用該函數(shù)后,此時(shí)寫(xiě)到屏幕上的字符是正常亮度的,該函數(shù)只適用于文本模式狀態(tài)(或說(shuō)字符狀屏幕狀態(tài))。 此函數(shù)相應(yīng)的頭文件為conio.h返回值: 無(wú)例: 設(shè)置屏幕顯示

18、為正常亮度。 normvideo();14. textcolor() 文本顏色函數(shù)功能: 函數(shù)textcolor()設(shè)置字符屏幕下文本顏色(或字符顏色),它也可以用于使字符閃爍。用法: 這個(gè)函數(shù)調(diào)用方式為void textcolor(int color);說(shuō)明: 函數(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)LIGHTGR

19、EEN 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返回值: 無(wú)例: 下面程序段中第一條語(yǔ)句使輸出的字符閃爍,第三條語(yǔ)句使字符輸出為經(jīng)色同時(shí)閃爍: textcolor(BLINK); pri

20、ntf(hello); textcolor(RED|BLINK);15. textattr() 文本屬性函數(shù)功能: 函數(shù)textattr()用于設(shè)置文本屬性,即字符背景顏色、字符本身顏色和字符閃爍與否。用法: 函數(shù)調(diào)用方式為void textattr(int attribute);說(shuō)明: 設(shè)置字符背景顏色屬性字節(jié)的最簡(jiǎn)單方法是,用所選的背景顏色值乘以16再與字符顏色值作按位或(OR)運(yùn)算。例如需要紅色背景、綠色字符,就設(shè)置成RED*16|GREEN,若還要字符閃爍,就把背景顏色值、字符顏色值與閃爍值一起按位作或運(yùn)算。如藍(lán)背景、黃字符且閃爍,就設(shè)置成為: YELLO|128|BLUE*16 第0

21、位用于設(shè)置字符顏色。 此函數(shù)相應(yīng)的頭文件為conio.h返回值: 無(wú)例: 設(shè)置背景為藍(lán)色、字符為紅色并且字符閃爍: textattr(RED|128|BLUE*16);16.textbackground() 文本背景函數(shù)功能: 函數(shù)textbackground()設(shè)置字符屏幕下文本背景顏色(或字符背景顏色)。用法: 此函數(shù)調(diào)用方式為void textbackground(int bcolor);說(shuō)明: 參數(shù)bcolor 的有效值取表1-4背景顏色(即宏名)或等價(jià)值。表1-4 背景顏色與等價(jià)值- 背景顏色 等價(jià)值 含 義- BLACK 0 黑 BLUE 1 藍(lán) GREEN 2 綠 CYAN 3

22、青 RED 4 紅 MAGENTA 5 洋紅 BROWN 6 棕-調(diào)用該函數(shù)只影響后續(xù)寫(xiě)的字符背景顏色,而不改變當(dāng)前顯示在屏幕上的字符背景顏色。 這個(gè)函數(shù)對(duì)應(yīng)的頭文件是conio.h返回值: 無(wú)例: 設(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);說(shuō)明: 這個(gè)函數(shù)調(diào)用無(wú)參數(shù),其對(duì)應(yīng)的頭文件是conio.h返回值: 函數(shù)調(diào)用成功,返回光標(biāo)處x坐標(biāo)值。例: 調(diào)用這

23、個(gè)函數(shù)的實(shí)例見(jiàn)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);說(shuō)明: 此函數(shù)調(diào)用無(wú)參數(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ù)gettextinf

24、o()獲取當(dāng)前文本窗口信息,并存放在實(shí)參結(jié)構(gòu)中。用法: 函數(shù)調(diào)用方式為void gettextinfo(struct text-info *info);說(shuō)明: 函數(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坐

25、標(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)的首地址,不要

26、傳遞結(jié)構(gòu)變量本身。 這個(gè)函數(shù)對(duì)應(yīng)的頭文件是conio.h返回值: 返回文本窗口角點(diǎn)坐標(biāo)、高寬度、文本屬性等值,并存放在info所指向的結(jié)構(gòu)變量中。例: 程序語(yǔ)句說(shuō)明如何正確調(diào)用gettextinfo()函數(shù): struct text-info win-status; gettextinfo(&win-status);一、確定顯示卡二、選擇顯示模式 三、圖形顯示 20. detectgraph() 顯示卡檢測(cè)函數(shù) 21. initgraph() 圖形初始化函數(shù) 22. getdrivername() 獲取圖形驅(qū)動(dòng)程序名的指針 23. getgraphmode() 獲取圖形模式函數(shù) 24. get

27、moderange()獲取模式值范圍函數(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è)置可輸出顯示頁(yè)函數(shù) 34. setvisualp

28、age() 設(shè)置可見(jiàn)顯示頁(yè)數(shù) 35. closegraph()關(guān)閉圖形模式函數(shù) 一、確定顯示卡 微機(jī)系統(tǒng)顯示部分由顯示器(monitor)和顯示卡(adapter)兩部分組成。顯示器是獨(dú)立于主機(jī)的一種外部設(shè)備,顯示卡或稱顯示適配卡,也有的稱圖形卡,是插在主機(jī)上的一塊電路板。但也有的顯示卡與主機(jī)板設(shè)計(jì)在一起。顯示卡包括寄存器組、存儲(chǔ)器和控制電路三大部分。其中存儲(chǔ)器又包括顯示RAM和ROM BIOS兩部分,微機(jī)對(duì)顯示屏幕的所有操作都是通過(guò)顯示卡來(lái)實(shí)現(xiàn)的。因此要進(jìn)行圖形顯示 ,首先要確定計(jì)算機(jī)上安裝的是何種顯示卡。一種方法是詢問(wèn)計(jì)算機(jī)或終端使用者,確定將要使用的顯示卡類型。這種方法很難,因?yàn)樯踔翆I(yè)

29、程序員也不總是能確定他正在使用什么樣的硬件。另一種方法是用軟件查詢硬件以識(shí)別當(dāng)前的配置。如果有一些識(shí)別硬件的標(biāo)準(zhǔn),這就很簡(jiǎn)單了。在Borland C中對(duì)現(xiàn)在所使用的各種顯示卡提供了支持,這只要調(diào)用detectgraph()函數(shù)就可以了,該函數(shù)為程序員確定計(jì)算機(jī)上使用的顯示卡類型。二、選擇顯示模式 顯示模式是指顯示卡支持的分辨率與相應(yīng)的顏色配置。每臺(tái)計(jì)算機(jī)都配置了某種類型顯示卡,可以為該顯示卡指定顯示模式。三、圖形顯示 進(jìn)行圖形顯示首先要確定顯示卡,然后選擇其顯示模式。這些工作都可以調(diào)用圖形功能函數(shù)來(lái)完成,其實(shí)就是把適合于顯示卡的圖形驅(qū)動(dòng)程序裝入內(nèi)存。如果圖形驅(qū)動(dòng)程序未裝入內(nèi)存,那么圖形函數(shù)就不

30、能操作。20. detectgraph() 顯示卡檢測(cè)函數(shù)功能: 函數(shù)detectgraph()在計(jì)算機(jī)上安裝有顯示卡的情況下,測(cè)定其顯示卡的類型。用法: 此函數(shù)調(diào)用方式為void detectgraph(int *driver,int *mode);說(shuō)明: 函數(shù)把driver所指向的整型變量設(shè)置為圖形驅(qū)動(dòng)程序的代碼,把mode所指向的整型變量設(shè)置為顯示卡支持的最高有效模式(即該顯示卡能支持的最高分辨率)。 該函數(shù)相應(yīng)的頭文件為graphics.h返回值: 返回適合于該顯示卡的圖形驅(qū)動(dòng)程序的代碼(也稱等價(jià)值),并存放在driver指向的變量中。若計(jì)算機(jī)系統(tǒng)中無(wú)圖形硬件,則由driver指向的變

31、量設(shè)置為-2。例: 檢測(cè)計(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);說(shuō)明: 1) 函數(shù)中參數(shù)driver指向圖形驅(qū)

32、動(dòng)程序(或者等價(jià)值)。 在頭部文件graphics.h中定義了圖形驅(qū)動(dòng)程序的宏名與其等價(jià) ,如下:宏 名 等價(jià)值-DETECT 0CGA 1MCGA 2EGA 3EGA64 4EGAMONO 5IBM8514 6HERCMONO 7ATT400 8VGA 9PC3270 10-注:在現(xiàn)在的計(jì)算機(jī)中,上表中的許多顯示卡已經(jīng)過(guò)時(shí),不再使用。這樣就不必?fù)?dān)心圖形驅(qū)動(dòng)程序的準(zhǔn)確名字,而只要用其等價(jià)值即可,若使用detect(即等價(jià)值0)時(shí),initgraph()函數(shù)自動(dòng)檢測(cè)當(dāng)前計(jì)算機(jī)中裝有的顯示卡類型,并且選用最大分辨率的顯示模式。2)參數(shù)mode指向顯示模式或用等價(jià)值(風(fēng)表1-5),mode所指的值必

33、須是有效模式之一。3)參數(shù)path指向圖形驅(qū)動(dòng)程序所在的路徑,例如path=C:TCBG1.若沒(méi)有指定路徑,就在當(dāng)前目錄下尋找。 一般圖形驅(qū)動(dòng)程序包含在.BGI文件中,這些文件是系統(tǒng)可以得到的。這個(gè)函數(shù)對(duì)應(yīng)的頭文件是graphics.h。返回值: 無(wú)例: 調(diào)用initgraph()自動(dòng)檢測(cè)硬件圖形系統(tǒng),并選用最大分辨率顯示模式。 init drver,mode; driver=DETECT; mode=0; initgraph(&driver,&mode,);22. getdrivername() 獲取圖形驅(qū)動(dòng)程序名的指針功能: 函數(shù)getdrivername()返回指向當(dāng)前圖形驅(qū)動(dòng)程序名的指

34、針。用法: 此函數(shù)調(diào)用方式為char *getdrivername(void);說(shuō)明: 本函數(shù)可以用來(lái)檢測(cè)顯示卡,但只能在initgraph()設(shè)置圖形驅(qū)動(dòng)程序和顯示模式之后調(diào)用。 該函數(shù)相應(yīng)的頭文件為graphics.h返回值: 返回一指針,指向含有當(dāng)前圖形驅(qū)動(dòng)程序名的字符串。例: 顯示當(dāng)前圖形驅(qū)動(dòng)程序名: #include #include void main() int graphdriver=DETECT,graphmode; char *s; initgraph(&graphdriver,&graphmode,); s=getdrivername(); outtext(Using d

35、river:); outtext(s); getch(); closegraph(); 23. getgraphmode() 獲取圖形模式函數(shù)功能: 函數(shù)getgrapgmode()返回當(dāng)前圖形模式。用法: 該函數(shù)調(diào)用方式為int getgraphmode(void);說(shuō)明: getgraphmode()函數(shù)無(wú)參數(shù)調(diào)用。 這個(gè)函數(shù)對(duì)應(yīng)的頭文件是graphics.h返回值: 返回initgraph()或setgraphmode()所設(shè)置的當(dāng)前圖形模式值。例: 顯示當(dāng)前圖形模式的代碼: printf(graphics mode is %d,getgraphmode();24. getmoderan

36、ge()獲取模式值范圍函數(shù)功能: 函數(shù)getmoderange()返回指定的圖形驅(qū)動(dòng)程序能夠支持的最低和最高模式值。用法: 函數(shù)調(diào)用方式為 void getmoderange(int driver,int *lowmode,int himode);說(shuō)明: 參數(shù)driver是用來(lái)調(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)過(guò)時(shí),

37、僅作參考。 該函數(shù)想應(yīng)的頭文件為graphics.h返回值: 返回的最小和最大有效值存放在參數(shù)指針lowmode和himode分別指向的整型變量中。例: 顯示當(dāng)前圖形硬件的顯示模式的范圍值: #includegraphics.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. getmaxmod

38、e()獲取最大顯示模式函數(shù)功能: 函數(shù)getmaxmode()返回當(dāng)前加載的圖形驅(qū)動(dòng)程序所支持的最大有效顯示模式。用法: 函數(shù)調(diào)用方式為int getmaxmode(void);說(shuō)明:本函數(shù)無(wú)參數(shù)調(diào)用,返回圖形驅(qū)動(dòng)程序所支持的最大顯示模式,所有圖形驅(qū)動(dòng)程序支持從0到getmaxmode()函數(shù)返回值中的任一整 數(shù)值(對(duì)應(yīng)的顯示模式)。 這個(gè)函數(shù)對(duì)應(yīng)的頭文件是graphics.h返回值:返回圖形驅(qū)動(dòng)程序所支持的顯示模式最大值。例: 顯示當(dāng)前最大顯示模式: printf(The maxmode of this driver is %dn,getmaxmode();26. getmodename()

39、獲取顯示模式名函數(shù)功能: 函數(shù)getmodename()可獲取當(dāng)前圖形驅(qū)動(dòng)程序支持的指定顯示模式的名字。用法: 此函數(shù)調(diào)用方式為char *getmodename(int modecode);說(shuō)明: 參數(shù)modecode為整型值。用以指定一顯示模式值調(diào)用該函數(shù)。 這個(gè)函數(shù)對(duì)應(yīng)的頭文件graphics.h返回值: 返回指定模式值的顯示模式名。例: 顯示當(dāng)前最大顯示模式名:#include#includevoid main() int graphdriver=DETECT,graphmode; int modecode; char *s; initgraph(&graphdriver,&graph

40、mode,); 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);說(shuō)

41、明: 該函數(shù)無(wú)參數(shù)調(diào)用。 這個(gè)函數(shù)相應(yīng)的頭文件為graphics.h返回值: 無(wú)例: 將圖形系統(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);說(shuō)明: 參數(shù)mode調(diào)用時(shí)為指定的模式值。 此函數(shù)相應(yīng)的頭部文件是graphics.h返回值: 無(wú)例: 把VGA圖形卡設(shè)

42、置為VGAMED模式: setgraphmode(VGAMED); / 圖形系統(tǒng)已經(jīng)初始化29. restorecrtmode() 恢復(fù)文本顯示模式函數(shù)功能: 函數(shù)restrecrtmode()將顯示模式恢復(fù)到調(diào)用initgraph()時(shí)檢測(cè)出的初始文本模式。用法: 這個(gè)函數(shù)調(diào)用方式為void restorecrtmode(void);說(shuō)明: 函數(shù)restorecrtmode()和setgraphmode()函數(shù)一起使用,可以實(shí)現(xiàn)文本與圖形顯示之間的切換。 此函數(shù)對(duì)應(yīng)的頭文件為graphics.h返回值: 無(wú)例: 恢復(fù)顯示模式為初始文本模式: restorecrtmode();30. grap

43、hresult() 圖形操作結(jié)果函數(shù)功能: 函數(shù)graphresult()函數(shù)返回最后一次圖形操作的代碼。用法: 此函數(shù)調(diào)用方式為int graphresult(void);說(shuō)明: C為圖形設(shè)置了代碼,它們是從-15到0的整數(shù)值。其含義見(jiàn)表1-6。 調(diào)用該函數(shù)時(shí),出錯(cuò)狀態(tài)被復(fù)位為0,所以返回值(代碼)最好存于變量中,以供需要時(shí)檢測(cè), 進(jìn)行下一步圖形操作。 圖形操作信息名稱 代碼 含 義 grOK grNoInitGraph grNoDetected grFileNoFound grInvalidDriver grNoLoadMem grNoScanMem grNoFloadMem grFont

44、NotFound grNoFontMem grInvalidMode grError grIOerror grInvalidFont grInvalidDeviceNum 0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15成功沒(méi)有圖形初始化沒(méi)有檢測(cè)到圖形硬件沒(méi)有找到圖形驅(qū)動(dòng)文件無(wú)效圖形驅(qū)動(dòng)程序沒(méi)有足夠內(nèi)存裝入圖形驅(qū)動(dòng)程序Scan填 充內(nèi)存不足Flood填 充內(nèi)存不足沒(méi)有找到字體文件沒(méi)有足夠內(nèi)存用于裝字體文件無(wú)效圖形模式一般圖形錯(cuò)誤輸入輸出錯(cuò)誤無(wú)效字體文件無(wú)效字體號(hào)無(wú)效設(shè)備號(hào)這個(gè)函數(shù)對(duì)應(yīng)的頭部文件是graphics.h返回值: 返回最后一次圖形操作結(jié)果相應(yīng)的代碼。例: 調(diào)

45、用graphresult()函數(shù)的實(shí)例見(jiàn)下面grapherrormsg()函數(shù)的例子。31. grpaherrormsg() 圖形錯(cuò)誤信息函數(shù)功能: 函數(shù)grapherrormsg()返回指向出錯(cuò)代碼相應(yīng)的錯(cuò)誤信息字符串的指針。用法: 此函數(shù)調(diào)用方式為char *grapherrormsg(int errcode);說(shuō)明: 參數(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ò)誤信息:

46、 int errorcode; errorcode=graphresult(); printf(%s,grapherrormsg(errcode);32. setgraphbufsize()設(shè)置圖形緩沖區(qū)大小函數(shù)功能: 函數(shù)setgraphbufsize()用來(lái)設(shè)置有的圖形函數(shù)(如floodfill等)所要用到的內(nèi)存緩沖區(qū)大小。用法: 函數(shù)調(diào)用方式為unsigned setgraphbufsize(unsigned bufsize);說(shuō)明: 這里無(wú)符號(hào)參數(shù)bufsize為所設(shè)置的緩沖區(qū)大小。 一般不需要用到該函數(shù),僅使用由initgraph()函數(shù)產(chǎn)生的內(nèi)存緩沖區(qū)就夠了,緩沖區(qū)大小缺省時(shí)為4KB(即4096個(gè)字節(jié)),足以用來(lái)填 充一個(gè)大約有

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論