Graafilises rezhiimis saab küll kasutada teksti väljastamiseks ka lihtsaid funktsioone, kuid tavaliselt kasutatakse selleks siiski funktsioone outtext() ja outtextxy().
void far outtext(char far *pString); void far outtextxy(int x, int y, char far *pString);
Funktsioon outtext() väljastab talle üleantud sümbolitejada ekraanile, alustades hetkelisest väljastamise positsioonist ja kasutades hetkelist rifti. Funktsioon outtextxy() seevastu alustab väljastamisega punktist (x,y). Funktsioon outtext() nihutab hetkelist väljastamise positsiooni väljastatud teksti lõppu, kui tekst väljastati normaalse suuna (HORIZ_DIR) ja hariliku joondamisega (LEFT_TEXT). Üle ekraani ulatuv tekstiosa ei esitata ekraanile. Väljastatava teksti suurus võib erineda vastavalt valitud riftile ja suurendusele. Tekstirea laiust ja kõrgust saab arvutada funktsioonidega textwidth() ja textheight().
int far textwidth(char far *pString); int far textheight(char far *pString);
Funktsiooniga settextstyle() saab määrata väljastamisel kasutatavat rifti, suurust ja suunda.
void far settextstyle(int font, int direction, int charsize);
Borland C/C++ sisaldab kahte liiki rifte: rasterrifte ja vektorrifte. Iga rift on salvestatud *.CHR failis. Need failid peavad asuma funktsioonis initgraph() määratud kataloogis. Te võite ka muuta need failid abiprogrammiga BGIOBJ.EXE objektfailideks ja siduda oma programmiga, mis muudab valmis programmi natuke suuremaks. Rasterriftid on salvestatud piklikus mustvalges rasterpildis. Tähestiku iga sümboli jaoks on selles rasterpildis reserveeritud eraldi ruudukene. Kui nüüd vastav täht väljastatakse ekraanile, siis kopeeritakse selle ruudukese sisu ekraani vastavasse punkti ja omistatakse valgetele punktidele eesplaani- ja mustadele tagaplaanivärvus. Selline väljastamine on väga kiire, kuid neid rifte on raske suurendada. Suurendamisel asendatakse iga piksel mitme sama värvi pikseliga ja nii lähevad tähed sakiliseks. Vektorriftid seevastu on salvestatud joone punktide jadana. Igale tähele vastavad mitu vektorit, mis kirjeldavad, kuidas seda tähte ekraanile joonistada. Enne ekraanile väljastamist muudetakse needki riftid rasterpildiks, mis kiirendab väljastamist. Seda aga tehakse iga kord enne uue rifti kasutamist ja nii ei ole kartust, et tähed kaotaksid suurendamisel oma kuju.
Funktsiooni settextstyle() parameeter font määrab järgnevates väljastusoperatsioonides kasutatava rifti ja võib omada järgmisi väärtusi:
| Konstant | Tähendus |
|---|---|
| DEFAULT_FONT | Harilik 8 x 8 pikselise ruuduga rasterrift. |
| TRIPLEX_FONT | Lihtne vektorrift |
| SMALL_FONT | Väikesepunktiline vektorrift |
| SANS_SERIF_FONT | Ilma serifideta vektorrift. Serifid on sümboli tippudesse joonistatud tillukesed jooned. |
| GOTHIC_FONT | Kalligraafilist käsikirja meenutav vektorrift. |
Tabel 18: Borland C/C++ graafilised riftid
Parameeter direction määrab, millises suunas tekst väljastatakse ja ta võib omada järgmisi väärtusi:
Viimane parameeter - charsize - määrab suurenduse. Kui näiteks charsize väärtus on 1, siis esitatakse harilik 8 x 8 rasterrift 8 x 8-pikselise ruudu sees. Kui aga charsize väärtus on 2, siis on iga täheruudu suuruseks 16 x 16 jne. Sel kombel saab rifti suurendada kuni 10-kordseks. Vektorriftide puhul võib määrata charsize väärtuseks 0, suurendus seatakse aga hoopis funktsiooniga setusercharsize().
void far setusercharsize(int multx, int divx, int multy, int divy);
Funktsiooni setusercharsize() esimesed kaks parameetrit määravad sümboli laiuse. Need parameetrid jagatakse omavahel (multx / divx) ja saadud konstandiga korrutatakse rifti algset laiust. Samamoodi määratakse ka rifti uus kõrgus.
Tavaliselt joondatakse väljastatav tekst vasakule ja üles, kuid funktsiooniga settextjustify() saab joondada teksti ka paremale, alla või keskele.
void far settextjustify(int horiz, int vert);
Funktsiooni settextjustify() parameetrid horz ja vert määravad vastavalt horisontaalse ja vertikaalse joondamise, ning võivad omada järgmisi väärtusi:
| Parameeter | Väärtus | Tähendus |
|---|---|---|
| horz | LEFT_TEXT | Vasakule joondatud tekst |
|
|
CENTER_TEXT | Horisontaalselt keskendatud tekst |
|
|
RIGHT_TEXT | Paremale joondatud tekst |
| vert | TOP_TEXT | Üles joondatud tekst |
|
|
CENTER_TEXT | Vertikaalselt keskendatud tekst |
|
|
BOTTOM_TEXT | Alla joondatud tekst |
Tabel 19: Graafilise teksti joondamine
Määratud teksti väljastamise parameetreid saab uuesti uurida funktsiooniga gettextsettings(), mis salvestab parameetrite hetkelised väärtused andmestruktuuri texttypeinfo.
void far gettextsettings( struct far texttypeinfo *textinfo);
struct texttypeinfo {
int font;
int charsize;
int direction;
int horiz;
int vert;
};
Kõik eespoolnimetatud funktsioonid kasutavad hetkel kehtivat koordinaatidesüsteemi. Nii nagu tekstirezhiimis, võib ka graafilises rezhiimis defineerida ekraanile piirkonna (akna), millesse järgnevad väljastusoperatsioonid esitavad oma andmeid. Selleks kasutatakse funktsiooni setviewport().
void far setviewport(int x1, int y1, int x2, int y2, int clip);
Funktsioon setviewport() määrab akna, mille ülemine vasak nurk asub punktis (x1, y1) ja alumine parem nurk punktis (x2, y2). Kui parameeter clip on nullist erinev, siis lõigatakse aknasse väljastatud graafiliste kujundite üle akna piiride ulatuvad osad ära (ei väljastata ekraanile). Funktsiooni setviewport() parameetrid määratakse ekraanikoordinaatides. Kui parameetrite väärtused on kehtetud, siis jääb hetkeline aken (viewport) kehtima. Akna sees asub koordinaatide süsteemi alguspunkt akna ülemises vasakus tipus. X - telg on suunatud vasakult paremale ja Y - telg ülevalt alla.
Peale uue graafilise rezhiimi määramist loob funktsioon initgraph() automaatselt kogu ekraani pinda hõlmava akna (viewport). Hiljem võib hetkelise akna suurust uurida funktsiooniga getviewsettings().
void far getviewsettings(struct viewporttype far *viewportinfo);
struct viewporttype {
int left;
int top;
int right;
int bottom;
int clip;
};
Funktsioon getviewsettings() täidab andmestruktuuri viewporttype vastavate andmetega.
Kogu ekraani puhastamiseks (tagaplaanivärvusega täitmiseks) kasutage funktsiooni cleardevice() ja hetkelise akna sisu puhastamiseks funktsiooni clearviewport().
void far cleardevice( void ); void far clearviewport( void );
Sõltuvalt graafikakaardist ja valitud graafilisest rezhiimist võib eksisteerida rohkem kui üks ekraanilehekülg. Ekraanilehekülg on osa graafikakaardimälust, mis suudab antud graafilises rezhiimis salvestada kogu ekraani pikselite väärtused. Ühele ekraanileheküljele väljastamine ei muuda teise lehekülje sisu. Borland C/C++ eristab aktiivse ja nähtava ekraanilehekülje vahel. Nähtav ekraanilehekülg on hetkel kasutajale nähtav ja teda määratakse funktsiooniga setvisualpage(). Aktiivne on see ekraanilehekülg, millele järgnevad väljastusoperatsioonid esitavad oma andmed ja teda seatakse funktsiooniga setactivepage().
void far setvisualpage(int page); void far setactivepage(int page);
Järgmised graafilised rezhiimid sisaldavad mitu ekraanilehekülge:
| Ohjurprogramm | Graafikarezhiim | Ekraanilehekülgi |
|---|---|---|
| EGA | EGALO | 4 |
|
|
EGAHI | 2 |
|
|
EGAMONOHI | 2 (kui mälu on 256K ) |
| HERC | HERCMONOHI | 2 |
| VGA | VGALO | 2 |
|
|
VGAMED | 2 |
Tabel 20: Ekraanileheküljed ja graafikarezhiimid
Ekraanilehekülgi kasutatakse sageli sujuva animatsiooni programmeerimiseks. Selleks seatakse ekraan graafikarezhiimi, mis sisaldab vähemalt kahte ekraanilehekülge. Kasutajale näidatakse kõigepealt animatsiooni esimest pilti ehk kaadrit (frame). Samal ajal joonistatakse varjatud leheküljele uut kaadrit. Kui see valmis saab, siis vahetatakse ekraanilehekülgi. Nii jääb otsene uue kaadri joonistamine kasutajale nähtamatuks ja see muudab animatsiooni sujuvamaks Seda meetodit nimetatakse kahe ekraanilehekülje animatsiooniks (double buffer animation).