C必看高級編程技術(shù)_第1頁
C必看高級編程技術(shù)_第2頁
C必看高級編程技術(shù)_第3頁
C必看高級編程技術(shù)_第4頁
C必看高級編程技術(shù)_第5頁
已閱讀5頁,還剩90頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、整理課件1l屏幕文本輸出屏幕文本輸出l圖形程序設(shè)計圖形程序設(shè)計l硬件驅(qū)動硬件驅(qū)動l鍵盤鼠標(biāo)輸入方法編程鍵盤鼠標(biāo)輸入方法編程l其它高級編程技術(shù)其它高級編程技術(shù)整理課件2l1.11.1文本方式的控制文本方式的控制l1.21.2窗口設(shè)置和文本輸出函數(shù)窗口設(shè)置和文本輸出函數(shù)l1.31.3清屏和光標(biāo)操作函數(shù)清屏和光標(biāo)操作函數(shù)l1.41.4屏幕文本移動與存取函數(shù)屏幕文本移動與存取函數(shù)l1.51.5狀態(tài)查詢函數(shù)狀態(tài)查詢函數(shù)整理課件3l文本方式就是顯示文本的模式,它的顯文本方式就是顯示文本的模式,它的顯示單位是字符而不是圖形方式下的象素,示單位是字符而不是圖形方式下的象素,在屏幕上顯示字符的位置坐標(biāo)用行和列在

2、屏幕上顯示字符的位置坐標(biāo)用行和列表示。表示。l缺省方式下,每屏為缺省方式下,每屏為8080列列2525行,行,Turbo CTurbo C規(guī)定屏的左上角為規(guī)定屏的左上角為l l行行l(wèi) l列,屏的右下角列,屏的右下角為為2525行行8080列。列。lTurbo CTurbo C支持的文本顯示方式有支持的文本顯示方式有5 5種,它種,它們可以用文本顯示方式設(shè)置函數(shù)來進(jìn)行們可以用文本顯示方式設(shè)置函數(shù)來進(jìn)行設(shè)置。設(shè)置。整理課件4其中newmode的值可分別為:l04025黑白顯示l14025彩色顯示l28025黑白顯示l38025彩色顯示l78025單色顯示l-1上一次的顯示方式整理課件5l文本顏色設(shè)

3、置函數(shù)文本顏色設(shè)置函數(shù)void textcolor(int void textcolor(int color)color)控制文本顯示的前景色,即字符顯控制文本顯示的前景色,即字符顯示的顏色,其參數(shù)示的顏色,其參數(shù)colorcolor僅能選擇僅能選擇1717種顏色,種顏色,即值為即值為016016。l文 本 背 景 顏 色 設(shè) 置 函 數(shù)文 本 背 景 顏 色 設(shè) 置 函 數(shù) v o i d v o i d textbackground(int color)textbackground(int color)設(shè)置文本顯設(shè)置文本顯示的背景顏色,其參數(shù)示的背景顏色,其參數(shù)colorcolor僅能選擇

4、僅能選擇8 8種顏色,種顏色,即值為即值為0707。l文本屬性設(shè)置函數(shù)文本屬性設(shè)置函數(shù)void textattr(int void textattr(int attr)attr)設(shè)置字符顯示的顏色,背景色,字設(shè)置字符顯示的顏色,背景色,字符顯示是否閃爍,顯示屬性參數(shù)符顯示是否閃爍,顯示屬性參數(shù)attrattr可用一個可用一個字節(jié)即字節(jié)即8 8位來描述。位來描述。整理課件6lvoid highvideo(void)用高亮度顯示字符。lvoid lowvideo(void)用低亮度顯示字符。lvoid normvideo(void)將設(shè)置通常亮度顯示字符。整理課件7l在文本方式下,沒進(jìn)行窗口設(shè)置時

5、,即在文本方式下,沒進(jìn)行窗口設(shè)置時,即窗口設(shè)置缺省時,認(rèn)為整個屏幕為顯示窗口設(shè)置缺省時,認(rèn)為整個屏幕為顯示窗口,窗口,lTurbo CTurbo C提供了窗口設(shè)置函數(shù)提供了窗口設(shè)置函數(shù)window()window(),可由用戶根據(jù)自己的需要來重新設(shè)定顯可由用戶根據(jù)自己的需要來重新設(shè)定顯示窗口。當(dāng)設(shè)定后,以后的控制臺示窗口。當(dāng)設(shè)定后,以后的控制臺I/OI/O操操作作( (即文本輸入輸出即文本輸入輸出) ),就可均在此窗口,就可均在此窗口中進(jìn)行。中進(jìn)行。整理課件8lvoid window(int x1void window(int x1,int y1int y1,int x2int x2,int

6、y2)int y2);l其中其中( (x1x1,y1)y1)為窗口的左上角坐標(biāo),為窗口的左上角坐標(biāo),( (x2x2,yz)yz)為窗口的右下角坐標(biāo),這些坐標(biāo)是以為窗口的右下角坐標(biāo),這些坐標(biāo)是以整個屏幕為參考坐標(biāo)系。整個屏幕為參考坐標(biāo)系。l利用窗口函數(shù)可以在屏幕上定義多個不利用窗口函數(shù)可以在屏幕上定義多個不同窗口,以顯示不同的信息。同窗口,以顯示不同的信息。整理課件9lprintf()printf(),putc()putc(),puts()puts(),putchar()putchar()和輸和輸出函數(shù)以整個屏幕為窗口的,它們不受由出函數(shù)以整個屏幕為窗口的,它們不受由windowwindow設(shè)置

7、的窗口限制,也無法用函數(shù)控制它設(shè)置的窗口限制,也無法用函數(shù)控制它們輸出的位置。們輸出的位置。lTurbo CTurbo C提供了三個文本輸出函數(shù),提供了三個文本輸出函數(shù), int int cprintf(char cprintf(char * *formatformat,) );int int cputs(char cputs(char * *str)str);int putch(int ch)int putch(int ch);它它們受窗口的控制,窗口內(nèi)顯示光標(biāo)的位置,就們受窗口的控制,窗口內(nèi)顯示光標(biāo)的位置,就是它開始輸出的位置。是它開始輸出的位置。整理課件10lvoid clrscr(vo

8、id)void clrscr(void);清除窗口中的文本,清除窗口中的文本,并將光標(biāo)移到當(dāng)前窗口的左上角,即并將光標(biāo)移到當(dāng)前窗口的左上角,即(1, (1, 1)1)處。處。l void clreol(void)void clreol(void);除當(dāng)前窗口中從除當(dāng)前窗口中從光標(biāo)位置開始到本行結(jié)尾的所有字符,光標(biāo)位置開始到本行結(jié)尾的所有字符,但不改變光標(biāo)原來的位置。但不改變光標(biāo)原來的位置。l void delline(void)void delline(void);刪除一行字符,刪除一行字符,該行是光標(biāo)所在行。該行是光標(biāo)所在行。整理課件11lvoid gotoxy(int xvoid goto

9、xy(int x,int y)int y);把光標(biāo)移把光標(biāo)移到窗口內(nèi)的到窗口內(nèi)的( (x x,y)y)處,處,x x,y y坐標(biāo)是相對坐標(biāo)是相對窗口而言。它多和窗口而言。它多和cprintfcprintf函數(shù)配合,以函數(shù)配合,以指定輸出開始位置。指定輸出開始位置。整理課件12lvoid movetext(int x1void movetext(int x1,int y1int y1,int int x2x2,int y2int y2,int x3int x3,int y3)int y3);l該函數(shù)將把屏幕上左上角為該函數(shù)將把屏幕上左上角為( (xlxl,y1)y1),右下角右下角為為( (x2

10、x2,y2)y2)的矩形內(nèi)文本拷貝到左上角為的矩形內(nèi)文本拷貝到左上角為( (x3x3,y3)y3)的一個新矩形區(qū)內(nèi)。這里的一個新矩形區(qū)內(nèi)。這里x x,y y坐標(biāo)是以整坐標(biāo)是以整個屏幕為窗口坐標(biāo)系,即屏幕左上角為個屏幕為窗口坐標(biāo)系,即屏幕左上角為(1(1,1)1)。l該函數(shù)與開設(shè)的窗口無關(guān),且原矩形區(qū)文本不該函數(shù)與開設(shè)的窗口無關(guān),且原矩形區(qū)文本不變。變。整理課件131、存文本函數(shù)存文本函數(shù)void gettext(int xlvoid gettext(int xl,int int y1y1,int x2int x2,int y2int y2,void void * *buffer)buffer)

11、;把左把左上角為上角為( (xlxl,y1)y1),右下角為右下角為( (x2x2,y2)y2)的矩形區(qū)的矩形區(qū)內(nèi)的文本存到由指針內(nèi)的文本存到由指針bufferbuffer指向的一個內(nèi)存緩指向的一個內(nèi)存緩沖區(qū)內(nèi)。沖區(qū)內(nèi)。2 2、取文本函數(shù)、取文本函數(shù)void puttext(int x1void puttext(int x1,int int y1y1,int x2int x2,int y2int y2,void void * *buffer)buffer);把由把由bufferbuffer指針指向的緩沖區(qū)內(nèi)所存文本復(fù)制到屏指針指向的緩沖區(qū)內(nèi)所存文本復(fù)制到屏幕上一矩形區(qū)內(nèi),該矩形區(qū)左上角為幕上一

12、矩形區(qū)內(nèi),該矩形區(qū)左上角為( (x1x1,y1)y1),右下角為右下角為( (x2x2,y2)y2)。整理課件14lvoid gettextinfo(struct text_info *f);l這里的text_info是在conio.h頭文件中定義的一個結(jié)構(gòu);l顯示當(dāng)前屏幕的顯示方式,當(dāng)前窗口的坐標(biāo)、當(dāng)前光標(biāo)的位置,文本的顯示屬性等。整理課件15lTurbo CTurbo C為用戶提供了一個功能很強(qiáng)的畫圖軟為用戶提供了一個功能很強(qiáng)的畫圖軟件庫,它又稱為件庫,它又稱為BorlandBorland圖形接口圖形接口( (BGI)BGI),它包它包括圖形庫文件括圖形庫文件( (graphics.lib

13、)graphics.lib),圖形頭文件圖形頭文件( (graphics.h)graphics.h)和許多圖形顯示器和許多圖形顯示器( (圖形終端圖形終端) )的的驅(qū)動程序驅(qū)動程序( (如如CGA.BGICGA.BGI、EGAVGA.BGIEGAVGA.BGI等等) )。及一。及一些字符集的字體驅(qū)動程序些字符集的字體驅(qū)動程序( (如如goth.chrgoth.chr黑體字黑體字符集等符集等) )。l編寫圖形程序時用到的一些圖形庫函數(shù)均在編寫圖形程序時用到的一些圖形庫函數(shù)均在graphics.libgraphics.lib中,執(zhí)行這些函數(shù)時,所需的有中,執(zhí)行這些函數(shù)時,所需的有關(guān)信息關(guān)信息( (

14、如宏定義等如宏定義等) )則包含在則包含在graphics.hgraphics.h頭文頭文件中。件中。整理課件16l顯示器的屏幕如同一張坐標(biāo)紙,顯示器的屏幕如同一張坐標(biāo)紙,在其上顯示圖形時,圖形上任一在其上顯示圖形時,圖形上任一點的位置均有確定的坐標(biāo),即可點的位置均有確定的坐標(biāo),即可用用x x,y y坐標(biāo)值來表示。坐標(biāo)值來表示。整理課件17l顯示器顯示的圖形均由一些圓點組成顯示器顯示的圖形均由一些圓點組成( (其其亮度、顏色不同亮度、顏色不同) ),這些點稱為象素,這些點稱為象素( (或或稱象點稱象點) ),它們是組成圖形的最小單位。,它們是組成圖形的最小單位。l象素的大小可以通過設(shè)置不同的顯

15、示方象素的大小可以通過設(shè)置不同的顯示方式來改變。象素在屏幕上的位置則可由式來改變。象素在屏幕上的位置則可由其所在的其所在的x x,y y坐標(biāo)來決定。坐標(biāo)來決定。整理課件18l計算機(jī)中要顯示的字符和圖形均以數(shù)字形式存儲在存計算機(jī)中要顯示的字符和圖形均以數(shù)字形式存儲在存儲器中,而顯示器接收的應(yīng)是模擬信號。儲器中,而顯示器接收的應(yīng)是模擬信號。l常用的顯示器有三條模擬紅綠蘭顏色的模擬信號輸入常用的顯示器有三條模擬紅綠蘭顏色的模擬信號輸入線,每條輸入線的電壓決定了顏色的亮度,只要能產(chǎn)線,每條輸入線的電壓決定了顏色的亮度,只要能產(chǎn)生出可區(qū)分的電壓來,它們不同的組合,便可使顯示生出可區(qū)分的電壓來,它們不同的

16、組合,便可使顯示器顯示出不同的顏色來。器顯示出不同的顏色來。l插在插在PCPC微機(jī)插槽中的圖形卡微機(jī)插槽中的圖形卡( (即適配器即適配器) ),其作用就是,其作用就是將要顯示的字符和圖形以數(shù)字形式存儲在卡上的視頻將要顯示的字符和圖形以數(shù)字形式存儲在卡上的視頻存儲器存儲器VRAMVRAM中,再將其變成視頻模擬信號送往相應(yīng)適中,再將其變成視頻模擬信號送往相應(yīng)適配的顯示器進(jìn)行顯示,也即適配器在計算機(jī)主機(jī)和顯配的顯示器進(jìn)行顯示,也即適配器在計算機(jī)主機(jī)和顯示器之間起到了信息轉(zhuǎn)換和視頻發(fā)送作用。示器之間起到了信息轉(zhuǎn)換和視頻發(fā)送作用。l由于計算機(jī)配有的顯示器種類不同,因而適配器種類由于計算機(jī)配有的顯示器種類

17、不同,因而適配器種類不同不同整理課件19l1 1單色顯示適配器單色顯示適配器( (MDA)MDA);僅顯示一種顏色,僅支持僅顯示一種顏色,僅支持80802525行的字符顯示。行的字符顯示。l2 2彩色圖形適配器彩色圖形適配器( (CGA)CGA);這是這是PC/XTPC/XT等微機(jī)配用的顯等微機(jī)配用的顯示器圖形卡,它可以產(chǎn)生單色或彩色字符和圖形。示器圖形卡,它可以產(chǎn)生單色或彩色字符和圖形。l3 3增強(qiáng)型圖形適配器增強(qiáng)型圖形適配器EGA)EGA);除支持除支持CGACGA的四種顯示的四種顯示模式外,還增加了分辨率為模式外,還增加了分辨率為640640200200的的1616色顯示方式,色顯示方式

18、, ( (EGAHI)EGAHI),也可顯示也可顯示1616色。色。l4 4視頻圖形陣列適配器視頻圖形陣列適配器( (VGA)VGA);它是目前流行的它是目前流行的PCPC微微機(jī)顯示標(biāo)準(zhǔn),它支持機(jī)顯示標(biāo)準(zhǔn),它支持CGACGA,EGAEGA的所有顯示方式,但自的所有顯示方式,但自己還有己還有640640480480的高分辨顯示方式的高分辨顯示方式( (VGAHI)VGAHI)、640640350350的中分辨顯示方式的中分辨顯示方式( (VGAMED)VGAMED)和和640640200200的低分辨顯示的低分辨顯示方式方式( (VGALO)VGALO),它們均可有它們均可有1616種顯示顏色可

19、供選擇。種顯示顏色可供選擇。整理課件20l5 5TVGATVGA;它是目前市面上最流行的它是目前市面上最流行的PC 486PC 486,586586微機(jī)配的顯示器標(biāo)準(zhǔn),在圖形方式下,它微機(jī)配的顯示器標(biāo)準(zhǔn),在圖形方式下,它可有可有640640400400,640640480480,800800600600,10241024768768及及76876810241024等分辨率,可選顏色達(dá)等分辨率,可選顏色達(dá)256256種,在文本方式下,可支持種,在文本方式下,可支持2525、3030、4343、6060行,行,132132列的字符顯示。它也兼容列的字符顯示。它也兼容CGACGA、EGAEGA、VG

20、AVGA的顯示方式,由于的顯示方式,由于Turbo CTurbo C早于該產(chǎn)品出現(xiàn),早于該產(chǎn)品出現(xiàn),因而上述增強(qiáng)了的顯示方式均不支持,但對于因而上述增強(qiáng)了的顯示方式均不支持,但對于高級編程者,可通過對高級編程者,可通過對TVGATVGA各專用寄存器直接各專用寄存器直接編程來實現(xiàn)這些功能。編程來實現(xiàn)這些功能。整理課件21l6 6PVGAPVGA;它是它是paradise VGAparadise VGA的縮寫,它由的縮寫,它由Western DigitalWestern Digital公司生產(chǎn),有的叫公司生產(chǎn),有的叫SVGA(SVGA(香港香港SurperkingSurperking公司生產(chǎn)的公司

21、生產(chǎn)的386386微機(jī)上使用微機(jī)上使用) )。還有。還有稱為稱為EVGA(Extended VGA)EVGA(Extended VGA),它們和它們和PVGAPVGA在軟硬在軟硬件上均是兼容的。件上均是兼容的。PVGAPVGA完全兼容完全兼容CGACGA、EGAEGA、VGAVGA的所有工作方式,它還有自己一些特有的的所有工作方式,它還有自己一些特有的工作模式,與工作模式,與TVGATVGA類似。類似。l7 7XGAXGA;XGAXGA是是IBMIBM公司新推出的一種增強(qiáng)性圖公司新推出的一種增強(qiáng)性圖形適配器,它是形適配器,它是VGAVGA的換代產(chǎn)品,具有更高的的換代產(chǎn)品,具有更高的分辨率和性能

22、,它有和分辨率和性能,它有和CGACGA,EGAEGA,VGAVGA全兼容全兼容的工作方式,但顯示速度卻比的工作方式,但顯示速度卻比VGAVGA快一倍??煲槐丁U碚n件22l8 8CVGACVGA;這是國內(nèi)研制的帶有顯示漢字這是國內(nèi)研制的帶有顯示漢字功能的功能的VGAVGA圖形適配器,它帶有漢字字庫,圖形適配器,它帶有漢字字庫,該適配器提供了和該適配器提供了和CGACGA、EGAEGA、VGAVGA全兼容全兼容的工作方式,還提供了在文本工作方式的工作方式,還提供了在文本工作方式下的高分辨圖形顯示功能。在它的下的高分辨圖形顯示功能。在它的ROM ROM BIOSBIOS中提供了中提供了INT10

23、HINT10H的功能號為的功能號為3030H H38H38H的功能調(diào)用,因而提供了方便的漢字的功能調(diào)用,因而提供了方便的漢字處理功能。處理功能。整理課件23l文本方式或稱字符顯示方式文本方式或稱字符顯示方式l圖形顯示方式圖形顯示方式l它們的主要差別是顯示存儲器它們的主要差別是顯示存儲器( (VRAM)VRAM)中存的信中存的信息不同。字符方式時,息不同。字符方式時,VRAMVRAM存放要顯示字符的存放要顯示字符的ASCIIASCII碼,用它作為地址,取出字符發(fā)生器碼,用它作為地址,取出字符發(fā)生器ROM(ROM(固定存儲器固定存儲器) )中存放的相應(yīng)字符的圖象中存放的相應(yīng)字符的圖象( (又又稱字

24、模稱字模) ),變成視頻信號在顯示器屏上進(jìn)行顯,變成視頻信號在顯示器屏上進(jìn)行顯示。圖形方式時,則要顯示的圖形的圖象直接示。圖形方式時,則要顯示的圖形的圖象直接存在存在VRAMVRAM中,中,VRAMVRAM中某地址單元存放的數(shù)就表中某地址單元存放的數(shù)就表示了相應(yīng)屏幕上某行和列上的象素及顏色。示了相應(yīng)屏幕上某行和列上的象素及顏色。整理課件24l1 1MCGA(MCGA(多色圖形陣列多色圖形陣列) );它和;它和VGAVGA是是PS/2PS/2系列微機(jī)的系列微機(jī)的主要適配器,主要適配器,MCGAMCGA功能上同功能上同CGACGA相似,它和相似,它和CGACGA是部分是部分兼容的,但有些功能又和兼

25、容的,但有些功能又和VGAVGA類似,可有類似,可有640640480480的二的二色模式。色模式。l2 2IBM8514IBM8514;該適配器可插入該適配器可插入PS/2PS/2微機(jī)中,它有較強(qiáng)微機(jī)中,它有較強(qiáng)的圖形功能,最高分辨率可達(dá)的圖形功能,最高分辨率可達(dá)10241024768768,可有,可有256256種種顏色。顏色。l3 3HERCHERC;大力神公司生產(chǎn)的一種單色適配器,是大力神公司生產(chǎn)的一種單色適配器,是PCPC系系列微機(jī)早期的第三種顯示標(biāo)準(zhǔn)列微機(jī)早期的第三種顯示標(biāo)準(zhǔn)( (其它兩種其它兩種MDAMDA和和CGA)CGA),它采用它采用720720348348高分辨單色顯示模

26、式。高分辨單色顯示模式。l4 4EGAMONOEGAMONO;EGAEGA單色適配器,它只有一種單色適配器,它只有一種640640350350單單色顯示模式。色顯示模式。整理課件25l即要用什么類型的圖形顯示適配器的驅(qū)即要用什么類型的圖形顯示適配器的驅(qū)動程序,動程序,l采用什么模式的圖形方式采用什么模式的圖形方式( (也就是相應(yīng)程也就是相應(yīng)程序的入口地址序的入口地址) ),l適配器驅(qū)動程序的尋找路徑名。適配器驅(qū)動程序的尋找路徑名。l注意:所用系統(tǒng)的顯示適配器一定要支注意:所用系統(tǒng)的顯示適配器一定要支持所選用的顯示模式,否則將出錯。持所選用的顯示模式,否則將出錯。整理課件26lvoid far

27、initgraph(int far void far initgraph(int far * *driverdriver,int far int far * *modemode,char far char far * *path_for_driver)path_for_driver);整理課件27lvoid far detectgraph(int far void far detectgraph(int far * *graphdrivergraphdriver,int far int far * *graphmode)graphmode);l它完成對適配器的檢查并得到顯示器類它完成對適配器的

28、檢查并得到顯示器類型號和相應(yīng)的最高分辨率模式,若所設(shè)型號和相應(yīng)的最高分辨率模式,若所設(shè)適配器不是規(guī)定的那些類型,則返回適配器不是規(guī)定的那些類型,則返回-2-2,表示適配器不存在。表示適配器不存在。整理課件28lvoid far cleardevice(void)void far cleardevice(void);該函數(shù)該函數(shù)作用范圍為整個屏幕。作用范圍為整個屏幕。lvoid far clearviewport(void);void far clearviewport(void);如果用如果用函數(shù)函數(shù)setviewportsetviewport定義一個圖視窗口,則定義一個圖視窗口,則可用清除圖

29、視口函數(shù),它僅清除圖視口可用清除圖視口函數(shù),它僅清除圖視口區(qū)域內(nèi)的內(nèi)容。區(qū)域內(nèi)的內(nèi)容。 整理課件29l當(dāng)畫圖程序結(jié)束,回到文本方式時,要關(guān)閉圖當(dāng)畫圖程序結(jié)束,回到文本方式時,要關(guān)閉圖形 系 統(tǒng) , 回 到 文 本 方 式 , 用形 系 統(tǒng) , 回 到 文 本 方 式 , 用 v o i d f a r v o i d f a r closegraph(void)closegraph(void);l為了不關(guān)閉圖形系統(tǒng),使相應(yīng)適配器的驅(qū)動程為了不關(guān)閉圖形系統(tǒng),使相應(yīng)適配器的驅(qū)動程序和字符集序和字符集( (字庫字庫) )仍駐留在內(nèi)存,但又回到原仍駐留在內(nèi)存,但又回到原來所設(shè)置的模式,則可用恢復(fù)工作模

30、式函數(shù)來所設(shè)置的模式,則可用恢復(fù)工作模式函數(shù)void far restorecrtmode(void)void far restorecrtmode(void);它也同時它也同時進(jìn)行清屏操作。該函數(shù)常和另一設(shè)置圖形工作進(jìn)行清屏操作。該函數(shù)常和另一設(shè)置圖形工作模式函數(shù)模式函數(shù)setgraphmodesetgraphmode交互使用,使得顯示器交互使用,使得顯示器工作方式在圖形和文本方式之間來回切換。工作方式在圖形和文本方式之間來回切換。整理課件30l圖形由點、線、面組成,圖形由點、線、面組成,Turbo Turbo C C提供了一些函數(shù),以完成這些提供了一些函數(shù),以完成這些操作。操作。整理課件3

31、1lvoid far putpixel(int xvoid far putpixel(int x,int yint y,int int color);color);它表示在指定的它表示在指定的x x,y y位置畫一點,位置畫一點,點的顯示顏色由設(shè)置的點的顯示顏色由設(shè)置的colorcolor值決定,關(guān)值決定,關(guān)于顏色的設(shè)置,將在設(shè)置顏色函數(shù)中介于顏色的設(shè)置,將在設(shè)置顏色函數(shù)中介紹。紹。l該函數(shù)的相對應(yīng)函數(shù)是取象素值函數(shù)該函數(shù)的相對應(yīng)函數(shù)是取象素值函數(shù)int int far getpixel(int xfar getpixel(int x,int y)int y);得到在得到在( (x x,y)y

32、)點位置上的象素的顏色值。點位置上的象素的顏色值。整理課件32移動畫筆到指定的移動畫筆到指定的( (x x,y)y)位置,移動過程不畫:位置,移動過程不畫:void far moveto(int xvoid far moveto(int x,int y)int y);畫筆從現(xiàn)行位置畫筆從現(xiàn)行位置( (x x,y)y)處移到一位置增量處處移到一位置增量處( (x+dxx+dx,y+dx)y+dx),移動過程不畫:移動過程不畫:void far moverel(int dxvoid far moverel(int dx,int dy)int dy);得到當(dāng)前畫筆所在位置得到當(dāng)前畫筆所在位置int

33、far getx(void)int far getx(void);得到當(dāng)前畫筆的得到當(dāng)前畫筆的x x位置位置int far gety(void)int far gety(void);得到當(dāng)前畫筆的得到當(dāng)前畫筆的y y位置位置整理課件33兩點之間畫線函數(shù)。兩點之間畫線函數(shù)。void far line(int x0void far line(int x0,int y0int y0,int x1int x1,int int y1)y1);從從( (x0 x0,y0)y0)點到點到( (x1x1,y1)y1)點畫一直線。點畫一直線。從現(xiàn)行畫筆位置到某點畫線函數(shù)。從現(xiàn)行畫筆位置到某點畫線函數(shù)。void

34、far lineto(int xvoid far lineto(int x,int y)int y);將從現(xiàn)行畫筆位置到將從現(xiàn)行畫筆位置到( (x x,y)y)點畫一直線。點畫一直線。從現(xiàn)行畫筆位置到一增量位置畫線函數(shù)從現(xiàn)行畫筆位置到一增量位置畫線函數(shù)void far linerel(int dxvoid far linerel(int dx,int dy)int dy);將從現(xiàn)行畫筆位置將從現(xiàn)行畫筆位置( (x x,y)y)到位置增量處到位置增量處( (x+dxx+dx,y+dy)y+dy)畫一直線。畫一直線。整理課件34# #include include main()main() int

35、 graphdriver=VGA;int graphdriver=VGA;int graphmode=VGAHI;int graphmode=VGAHI;initgraph(&graphdriver,&graphmode,);initgraph(&graphdriver,&graphmode,);cleardevice();cleardevice();moveto(100,20);moveto(100,20);lineto(100,80);lineto(100,80);moveto(200,20);moveto(200,20);lineto(100,80);lineto(100,80);lin

36、e(100,90,200,90);line(100,90,200,90);linerel(0,20);linerel(0,20);moverel(-100,0);moverel(-100,0);linerel(30,20);linerel(30,20);getch();getch();closegraph();closegraph();整理課件35l畫矩形函數(shù)畫矩形函數(shù)lvoid far rectangle(int xlvoid far rectangle(int xl,int y1int y1,int int x2x2,int y2)int y2);l該函數(shù)將以該函數(shù)將以( (x1x1,y1

37、)y1)為左上角,為左上角,( (x2x2,y2)y2)為右為右下角畫一矩形框。下角畫一矩形框。l畫條形圖函數(shù)畫條形圖函數(shù)lvoid bar(int x1void bar(int x1,int y1int y1,int x2int x2,int y2)int y2);l該函數(shù)將以該函數(shù)將以( (xlxl,y1)y1)為左上角,為左上角,( (x2x2,y2)y2)為右為右下角畫一實形條狀圖,沒有邊框,圖的顏色和下角畫一實形條狀圖,沒有邊框,圖的顏色和填充模式可以設(shè)定填充模式可以設(shè)定。整理課件36l編寫程序,由編寫程序,由rectanglerectangle函數(shù)以函數(shù)以(100(100,20)2

38、0)為左上角,為左上角,(200(200,50)50)為右下角畫一矩形,為右下角畫一矩形,接著由接著由barbar函數(shù)以函數(shù)以(100(100,80)80)為左上角,為左上角,(150(150,180)180)為右下角畫一實形條狀圖,為右下角畫一實形條狀圖,用缺省顏色用缺省顏色( (白色白色) )填充。填充。整理課件37# #include include main()main()int graphdriver=DETECTint graphdriver=DETECT;int graphmode,xint graphmode,x;initgraph(&graphdriver,&graphmod

39、e,initgraph(&graphdriver,&graphmode,”) );cleardevice()cleardevice();rectangle(100rectangle(100,2020,200200,50)50);bar(100bar(100,8080,150150,180)5180)5getch()getch();closegraph()closegraph(); 整理課件38畫橢圓函數(shù)畫橢圓函數(shù)void ellipse(int xvoid ellipse(int x,int yint y,int stangleint stangle,int endangelint endan

40、gel,int xradiusint xradius,int yradius)int yradius);該函數(shù)將以該函數(shù)將以( (x x,y)y)為中心,以為中心,以xradiusxradius和和yradiusyradius為為x x軸和軸和y y軸半徑,從起始角軸半徑,從起始角stanglestangle開始到開始到endangleendangle角結(jié)束,畫一橢圓線。當(dāng)角結(jié)束,畫一橢圓線。當(dāng)stangle=0stangle=0,endangle=360endangle=360時,則畫出的是一個完整的橢圓,時,則畫出的是一個完整的橢圓,否則畫出的將是橢圓弧。否則畫出的將是橢圓弧。整理課件39

41、l畫圓函數(shù)畫圓函數(shù)lvoid far circle(int xvoid far circle(int x,int yint y,int int radius)radius);l該函數(shù)將以該函數(shù)將以( (x x,y)y)為圓心,為圓心,radiusradius為半徑畫個為半徑畫個圓。圓。l畫圓弧函數(shù)畫圓弧函數(shù)lvoid far arc(int xvoid far arc(int x,int yint y,int stangleint stangle,int endangleint endangle,int radius)int radius);l該函數(shù)將以該函數(shù)將以( (x x,y)y)為圓心,

42、為圓心,radiusradius為半徑,從為半徑,從stanglestangle為起始角開始,到為起始角開始,到endangleendangle為結(jié)束角為結(jié)束角畫一圓弧。畫一圓弧。整理課件40l畫扇形圖函數(shù)畫扇形圖函數(shù)lvoid far pieslice(int xvoid far pieslice(int x,int yint y,int int stanglestangle,int endangleint endangle,int radius)int radius);l該函數(shù)將以該函數(shù)將以( (x x,y)y)為圓心,為圓心,radiusradius為半為半徑,從徑,從stanglest

43、angle為起始角,為起始角,endangleendangle為結(jié)為結(jié)束角,畫一扇形圖,扇形圖的填充模式束角,畫一扇形圖,扇形圖的填充模式和填充顏色可以事先設(shè)定,否則以缺省和填充顏色可以事先設(shè)定,否則以缺省模式進(jìn)行。模式進(jìn)行。整理課件41lvoid far bar3d(int x1void far bar3d(int x1,int y1int y1,int int x2x2,int y2int y2,int depthint depth,int topflag)int topflag);l該函數(shù)參數(shù)名定義如圖該函數(shù)參數(shù)名定義如圖2.142.14所示。當(dāng)所示。當(dāng)topflagtopflag非非0

44、 0時,畫出三維頂,否則將不時,畫出三維頂,否則將不畫出三維頂,畫出三維頂,depthdepth決定了三維直方圖的決定了三維直方圖的長度。長度。整理課件42畫三維立體直方圖函數(shù)畫三維立體直方圖函數(shù)void far bar3d(int x1void far bar3d(int x1,int y1int y1,int x2int x2,int int y2y2,int depthint depth,int topflag)int topflag); 畫橢圓扇形函數(shù)畫橢圓扇形函數(shù) viod far sector(int xviod far sector(int x,int yint y,int in

45、t stanglestangle,int endang1eint endang1e,int xradiusint xradius,int int yradius)yradius);該函數(shù)將以該函數(shù)將以( (x x,y)y)為圓心,以為圓心,以xradiusxradius和和yradiusyradius為為x x軸和軸和y y軸半徑,從起始角軸半徑,從起始角stang1estang1e開始到開始到endang1eendang1e角結(jié)束,畫一橢圓扇形圖,并按設(shè)置角結(jié)束,畫一橢圓扇形圖,并按設(shè)置的填充模式和顏色填充。當(dāng)?shù)奶畛淠J胶皖伾畛?。?dāng)stang1estang1e為為0 0,endanglee

46、ndangle為為360360時,則畫出一完整的橢圓圖。時,則畫出一完整的橢圓圖。整理課件43l 畫橢圓圖函數(shù)畫橢圓圖函數(shù)l void far fillellipse(int xvoid far fillellipse(int x,int yint y,int int xradiusxradius,int yradius)int yradius); ”l 該函數(shù)將以該函數(shù)將以( (x x,y)y)為圓心,以為圓心,以xradiusxradius和和yradiusyradius為為x x軸和軸和y y軸半徑,畫一橢圓圖,并以設(shè)定或缺省模式軸半徑,畫一橢圓圖,并以設(shè)定或缺省模式和顏色填充。和顏色填

47、充。l 畫多邊形圖函數(shù)畫多邊形圖函數(shù)l void far fillpoly(int numpointsvoid far fillpoly(int numpoints,int far int far * *polypoints)polypoints)l 該函數(shù)將畫出一個頂點數(shù)為該函數(shù)將畫出一個頂點數(shù)為numpointsnumpoints,各頂點坐各頂點坐標(biāo) 由標(biāo) 由 p o l y p o i n t sp o l y p o i n t s 給 出 的 多 邊 形 , 也 即 邊 數(shù) 為給 出 的 多 邊 形 , 也 即 邊 數(shù) 為polypoints-1polypoints-1,當(dāng)為一封閉圖

48、形時,當(dāng)為一封閉圖形時,numpohtsnumpohts應(yīng)為多應(yīng)為多邊形的頂點數(shù)加邊形的頂點數(shù)加1 1,并且第一個頂點坐標(biāo)應(yīng)和最后一個,并且第一個頂點坐標(biāo)應(yīng)和最后一個頂點的坐標(biāo)相同。頂點的坐標(biāo)相同。整理課件44l象素的顯示顏色,或者說畫線、填充面的顏色象素的顯示顏色,或者說畫線、填充面的顏色都可以用一些函數(shù)來設(shè)置,否則將采用缺省的都可以用一些函數(shù)來設(shè)置,否則將采用缺省的值。值。l顯示點、線、面的顏色,稱為前景色,而襯托顯示點、線、面的顏色,稱為前景色,而襯托它們的背景,稱為背景色。它們的背景,稱為背景色。l按照按照CGACGA、EGAEGA、VGAVGA圖形適配器的硬件結(jié)構(gòu),圖形適配器的硬件結(jié)

49、構(gòu),顏色可以通過對其內(nèi)部相應(yīng)的寄存器進(jìn)行編程顏色可以通過對其內(nèi)部相應(yīng)的寄存器進(jìn)行編程來改變,但不編程時,則取缺省值。來改變,但不編程時,則取缺省值。l顏色的設(shè)置,一般用所謂調(diào)色板來進(jìn)行描述,顏色的設(shè)置,一般用所謂調(diào)色板來進(jìn)行描述,它實際上對應(yīng)一些硬件的寄存器。它實際上對應(yīng)一些硬件的寄存器。整理課件45l從C語言的角度看,調(diào)色板實際上就是一張顏色索引表,對CGA顯示器,在中分辨顯示方式下,有4種顯示模式,每一種模式對應(yīng)有一個調(diào)色板,可用調(diào)色板號區(qū)別。l模式調(diào)色板號顏色值l 0 1 2 3lCGAC00背景色綠紅黃lCGAC11背景色青洋紅 白lCGAC22背景色淡綠 淡紅 棕lCGAC33背景色

50、淡青 淡洋紅淡灰整理課件46l前景顏色設(shè)置函數(shù):前景顏色設(shè)置函數(shù):l void far setcolor(int color)void far setcolor(int color);l 該函數(shù)將使得前景以所選該函數(shù)將使得前景以所選colorcolor顏色進(jìn)行顏色進(jìn)行顯示,對顯示,對CGACGA,當(dāng)為中分辨模式時只能選當(dāng)為中分辨模式時只能選0 0,1 1,2 2,3 3。l選擇背景顏色的函數(shù):選擇背景顏色的函數(shù):l void far setbkcolor(int color)void far setbkcolor(int color)l該函數(shù)將使得背景色按所選該函數(shù)將使得背景色按所選1616種

51、中的一種種中的一種colorcolor顏色進(jìn)行顯示。顏色進(jìn)行顯示。整理課件47lTurbo CTurbo C也提供了改變線的寬度、類型的函數(shù),也提供了改變線的寬度、類型的函數(shù),其線的寬度當(dāng)不設(shè)定時,取缺省值,即一個象其線的寬度當(dāng)不設(shè)定時,取缺省值,即一個象素寬,當(dāng)設(shè)定為素寬,當(dāng)設(shè)定為3 3時,可取三個象素寬。當(dāng)線時,可取三個象素寬。當(dāng)線的形狀不設(shè)定時,取缺省值,即實線。設(shè)定時,的形狀不設(shè)定時,取缺省值,即實線。設(shè)定時,可有可有5 5種選擇,它們可用設(shè)定線型函數(shù)來進(jìn)行種選擇,它們可用設(shè)定線型函數(shù)來進(jìn)行設(shè)置:設(shè)置:lvoid far setlinestyle(int linestylevoid f

52、ar setlinestyle(int linestyle,unsigned upatternunsigned upattern,int thickness)int thickness);l其中其中 1 1inestyleinestyle為線型參數(shù);為線型參數(shù); thicknessthickness為線為線的寬度參數(shù)。的寬度參數(shù)。整理課件48lvoid far setfilestyle(int pattern,int color);l該函數(shù)將用設(shè)定的color顏色和pattern圖模式對后面畫出的輪廓圖進(jìn)行填充,這些圖輪廓是由待定函數(shù)畫出的。lcolor實際上就是調(diào)色板寄存器索引號,lpatt

53、ern表示填充模式,整理課件49lvoid far setfillpattern(char void far setfillpattern(char * *upattefnupattefn,int color)int color);l該函數(shù)設(shè)置用戶自定義可填充模式,以該函數(shù)設(shè)置用戶自定義可填充模式,以colorcolor指出的顏色對封閉圖形進(jìn)行填充。指出的顏色對封閉圖形進(jìn)行填充。lcolorcolor實際上就是調(diào)色板寄存器號,也可用顏實際上就是調(diào)色板寄存器號,也可用顏色名代替。色名代替。l參數(shù)參數(shù)upatternupattern是一個指向是一個指向8 8個字節(jié)存儲區(qū)的指個字節(jié)存儲區(qū)的指針,這針

54、,這8 8個字節(jié)表示了一個個字節(jié)表示了一個8 88 8象素點陣組成象素點陣組成的填充圖模,它是由用戶自定義的,它將用來的填充圖模,它是由用戶自定義的,它將用來對封閉圖形填充。對封閉圖形填充。整理課件50lvoid far fillsettings(struct void far fillsettings(struct fillsettingstype far fillsettingstype far * *fillinfo);fillinfo);l它將得到當(dāng)前的填充模式和顏色,這些它將得到當(dāng)前的填充模式和顏色,這些信息存在結(jié)構(gòu)指針變量信息存在結(jié)構(gòu)指針變量fillinfofillinfo指出的指

55、出的結(jié)構(gòu)中。結(jié)構(gòu)中。整理課件51l畫條形圖函數(shù)畫條形圖函數(shù)barbar和畫扇形函數(shù)和畫扇形函數(shù)pieslisepieslise,它它們需要用們需要用setfillstylesetfillstyle函數(shù)設(shè)置填充模式和顏函數(shù)設(shè)置填充模式和顏色,否則按缺省方式。色,否則按缺省方式。l其它:畫三維立體直方圖函數(shù)其它:畫三維立體直方圖函數(shù)lvoid far bar3d(int x1void far bar3d(int x1,int y1int y1,int x2int x2,int y2int y2,int depthint depth,int topflag)int topflag);l該函數(shù)參數(shù)名定

56、義:該函數(shù)參數(shù)名定義:topflagtopflag非非0 0時,畫出三維時,畫出三維頂,否則將不畫出三維頂,頂,否則將不畫出三維頂,depthdepth決定了三維決定了三維直方圖的長度。直方圖的長度。整理課件52l 畫橢圓扇形函數(shù)畫橢圓扇形函數(shù)l viod far sector(int xviod far sector(int x,int yint y,int int stanglestangle,int endang1eint endang1e,int xradiusint xradius,int int yradius)yradius);l該函數(shù)將以該函數(shù)將以( (x x,y)y)為圓心,

57、以為圓心,以xradiusxradius和和yradiusyradius為為x x軸和軸和y y軸半徑,從起始角軸半徑,從起始角stang1estang1e開開始到始到endang1eendang1e角結(jié)束,畫一橢圓扇形圖,并按角結(jié)束,畫一橢圓扇形圖,并按設(shè)置的填充模式和顏色填充。當(dāng)設(shè)置的填充模式和顏色填充。當(dāng)stang1estang1e為為0 0,endangleendangle為為360360時,則畫出一完整的橢圓圖。時,則畫出一完整的橢圓圖。整理課件53l畫橢圓圖函數(shù)畫橢圓圖函數(shù)l void far fillellipse(int xvoid far fillellipse(int x,

58、int yint y,int int xradiusxradius,int yradius)int yradius); ”l 該函數(shù)將以該函數(shù)將以( (x x,y)y)為圓心,以為圓心,以xradiusxradius和和yradiusyradius為為x x軸和軸和y y軸半徑,畫一橢圓圖,并以設(shè)定或缺省模式軸半徑,畫一橢圓圖,并以設(shè)定或缺省模式和顏色填充。和顏色填充。l 畫多邊形圖函數(shù)畫多邊形圖函數(shù)l void far fillpoly(int numpointsvoid far fillpoly(int numpoints,int far int far * *polypoints)pol

59、ypoints)l 該函數(shù)將畫出一個頂點數(shù)為該函數(shù)將畫出一個頂點數(shù)為numpointsnumpoints,各頂點坐各頂點坐標(biāo) 由標(biāo) 由 p o l y p o i n t sp o l y p o i n t s 給 出 的 多 邊 形 , 也 即 邊 數(shù) 為給 出 的 多 邊 形 , 也 即 邊 數(shù) 為polypoints-1polypoints-1,當(dāng)為一封閉圖形時,當(dāng)為一封閉圖形時,numpohtsnumpohts應(yīng)為多應(yīng)為多邊形的頂點數(shù)加邊形的頂點數(shù)加1 1,并且第一個頂點坐標(biāo)應(yīng)和最后一個,并且第一個頂點坐標(biāo)應(yīng)和最后一個頂點的坐標(biāo)相同。頂點的坐標(biāo)相同。整理課件54lsetfillsty

60、lesetfillstyle函數(shù),只能對由上述特定函數(shù)產(chǎn)函數(shù),只能對由上述特定函數(shù)產(chǎn)生的圖形進(jìn)行顏色填充,生的圖形進(jìn)行顏色填充,l對任意封閉圖形均可進(jìn)行填充的是函數(shù):對任意封閉圖形均可進(jìn)行填充的是函數(shù):l void far floodfill(int xvoid far floodfill(int x,int yint y,int int border)border);l 該函數(shù)將對一封閉圖形進(jìn)行填充,其顏色該函數(shù)將對一封閉圖形進(jìn)行填充,其顏色和模式將由設(shè)定的或缺省的圖模與顏色決定。和模式將由設(shè)定的或缺省的圖模與顏色決定。其中參數(shù)其中參數(shù)( (x x,y)y)為封閉圖形中的任一點,為封閉圖形中

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論