conio.h函數(shù)詳解

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() 移動文字函數(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),它是屏幕的活動部分,字符輸出或顯示在活動窗口中進(jìn)行.窗口在缺省時(shí),就是整個屏幕.窗口可以根據(jù)需要指定其大小.同樣,對圖形函數(shù)的操作,也提供了(Viewport).也就是說圖形函數(shù)的操作都是在視口上進(jìn)行.圖形視口與字符窗口具有相同的特性,用戶可以在屏幕上定義大小不同的視口,若不定義視口大小,它就是整個屏幕.

窗口是在字符屏幕下的概念,只有字符才能在窗口中顯示出來,這時(shí)用戶可以訪問的最小單位為一個字符.視口是在圖形屏幕狀態(tài)下的概念,文本與圖形都可以在視口上顯示,用戶可訪問的最小單位是一個像素(像素這一術(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位置上,這未必是相對于整個屏幕.下面介紹常用的幾類字符屏幕函數(shù)的功能用途,操作方法及其例行程序.

一,屏幕操作函數(shù)

編寫程序繪圖經(jīng)常要用到對字符屏幕進(jìn)行操作.例如,在往屏幕上寫字符之前,首先要將屏幕清除干凈.又如,有時(shí)需要在屏幕上多處寫上肉中刺樣的字符內(nèi)容,這時(shí)最好用屏幕拷貝來高效率地完成這一任務(wù).對這些操作,Borland C++提供了一系列字符屏幕操作函數(shù)來實(shí)現(xiàn).

1. clrscr()清除字符窗口函數(shù)

功能:函數(shù)clrscr()清除整個當(dāng)前字符窗口,并且把光標(biāo)定位于左上角(1,1)處.

用法:此函數(shù)調(diào)用方式為 void clrscr(void);

說明:括號中void 表示無參數(shù).

該函數(shù)相應(yīng)的頭文件為conio.h

返回值:無

例:使用這個函數(shù)的例子見4.clreol()函數(shù)的實(shí)例中.

2. window()字符窗口函數(shù)

功能: 函數(shù)window()用于在指定位置建立一個字符窗口.

用法: 此函數(shù)調(diào)用方式為 void window(int left,int top,int right,int bottom);

說明: 函數(shù)中參數(shù)left,top為窗口左上角坐標(biāo);right,bottom為其右下角坐標(biāo).

若有一個坐標(biāo)是無效的,則window()函數(shù)不起作用.一旦該函數(shù)調(diào)用成功,那么所有定位坐標(biāo)都是相對于窗口的,而不是相對于整個屏幕.但是建立窗口所用的坐標(biāo)總是相對整個屏幕的絕對坐標(biāo),而不是相對當(dāng)前窗口的相對坐標(biāo).這樣用戶就可以根據(jù)各種需要建立多個互不嵌套的窗口.

此函數(shù)的頭文件為conio.h.

返回值:無

例: 調(diào)用這個函數(shù)的實(shí)現(xiàn)例見3.gotoxy()函數(shù)的例子中.

3. gotoxy()光標(biāo)定位函數(shù)

功能: 函數(shù)gotoxy()將字屏幕上的光標(biāo)移到當(dāng)前窗口指定的位置上.

用法: 這個函數(shù)調(diào)用方式為void gotoxy(int x,int y);

說明: 括號里x,y是, 光標(biāo)定位的坐標(biāo),如果其中一個坐標(biāo)值無效(如坐標(biāo)超界),那么光標(biāo)不會移動.

此函數(shù)在字符狀態(tài)(有時(shí)稱為文本狀態(tài))下經(jīng)常用到 ,其相應(yīng)的頭文件為conio.h

返回值:無

例: 下面程序建立兩個窗口,然后在窗口里顯示字符,字符的位置是調(diào)用該函數(shù)確定的.

#include"conio.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;i<20;i++)

printf("Hello\n");

getch();

clrscr();

}

5. insline() 插入空行函數(shù)

功能: 函數(shù)insline()插入一空行到當(dāng)前光標(biāo)所在行上,同時(shí)光標(biāo)以下的所有行都向下順移一行.

用法: 此函數(shù)的調(diào)用方式為void insline(void);

說明: 該函數(shù)只用于文本方式,并且在當(dāng)了符窗口才有效.

這個函數(shù)的對應(yīng)頭文件是 conio.h

返回值:無

例: 程序給出了insline()函數(shù)的用法.

#include "conio.h"

void main()

{

registser int i;

clrscr();

for(i=1;i<24;i++)

{

gotoxy(1,i);

printf("This is line %d\n",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)前窗口小于整個屏幕,那么該函數(shù)只影響到窗口內(nèi)的字符.

這個函數(shù)相應(yīng)的頭部文件是conio.h

返回值: 無

例:先在屏幕上顯示16行文字,然后刪除第4行

#include "conio.h"

void main()

{

register int i;

clrscr();

for(i=0;i<16;i++) printf("line %d\n",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指針必須指向一個足夠保存該矩形域內(nèi)文字的內(nèi)存.所用內(nèi)存大小按下式計(jì)算:

點(diǎn)頭用字節(jié)數(shù)=矩形哉內(nèi)的行數(shù)×矩形域的列數(shù)×2

這里將行數(shù)乘以列數(shù)再乘以2的原因是保存屏幕上每個字符要用兩個字節(jié)存儲單元,一個字節(jié)存儲單元存放字符本身,而另一個存放其屬性.

此函數(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)存中的文字拷出到屏幕上一個矩形區(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.

例: 屏幕上某個區(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() 移動文字函數(shù)

功能: 函數(shù)movetext()將屏幕上一個矩形區(qū)域的文字移到另一個區(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為移動到區(qū)域左上角坐標(biāo).這些坐標(biāo)是屏幕的絕對坐標(biāo),不是窗口的相對坐標(biāo).

若要把屏幕上一段文字移到屏幕的另一位置,那么使用movetext()函數(shù)比用gettext()然后再用puttext()效率更高.

此函數(shù)相應(yīng)的頭文件是conio.h

返回值: 如果有一個以上坐標(biāo)無效,那么函數(shù)返回值為0,否則返回1.

列: 把屏幕左上角點(diǎn)(8,8),右下角點(diǎn)(20,20)的矩形區(qū)域文字移動到左上角點(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中所示的模式之一⑴以用模式名(符號值),也可以用其等價(jià)的整數(shù)值.

表1-2 文本模式

----------------------------------------------------------------

模式名(符號值) 等價(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)).

這個函數(shù)對應(yīng)的頭文件為 conio.h

返回值: 無

例: 設(shè)置屏幕顯示為高亮度的.

highvideo();

12. lowvideo() 低亮度函數(shù)

功能: 函數(shù)lowvideo()設(shè)置屏幕為低亮度顯示.

用法: 該函數(shù)調(diào)用方式為void lowvideo(void);

說明: 調(diào)用該函數(shù)后,此時(shí)寫到屏幕上的字符是低亮度的.這個函數(shù)只適用于文本模式狀態(tài)(或說字符屏幕狀態(tài)).

此函數(shù)相應(yīng)的頭文件是 conio.h

返回值: 無

例: 設(shè)置屏幕顯示為低亮度的

lowvideo();

13. normvideo(void);

功能: 函數(shù)normvideo()設(shè)置屏幕為正常亮度顯示.

用法: 這個函數(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è)置字符屏幕下文本顏色(或字符顏色),它也可以用于使字符閃爍.

用法: 這個函數(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)前顯示在屏幕上的字符背景顏色.

這個函數(shù)對應(yīng)的頭文件是conio.h

返回值: 無

例: 設(shè)置文本背景顏色為藍(lán)色:

textbackground(BLUE));

三, 屏顯狀態(tài)函數(shù)

這里提供三個在文本模式下屏幕顯示狀態(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);

說明: 這個函數(shù)調(diào)用無參數(shù),其對應(yīng)的頭文件是conio.h

返回值: 函數(shù)調(diào)用成功,返回光標(biāo)處x坐標(biāo)值.

例: 調(diào)用這個函數(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; // 文本窗口寬度(以字符個數(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)變量本身.

這個函數(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)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容