CyberPress
közéleti magazin
cyberpress@sopron.hu
2024. december 29., vasárnap, Tamás, Tamara napja


Irodalmi Kávéház

Intranet Galéria

Apróhirdetések

Képeslapok

Soproni Képindex

Polgármesteri Hivatal

ZÓNÁK
Főoldal
Lapszemle
  Lapszemle
Kultúra
  KultúrVáros
  Lélektől lélekig
  SzínházVilág
  Soproni Ünnepi Hetek
  Borváros
Regionális kulturális programajánló
  Színház
  Kiállítás
  Rendezvények
  Hangverseny-Zene
Cyber Kurír
  Hírek - események
  Szomszédvár - Régió
  Soproni Snassz
Európai Unió
  EU
Cyber hírek
  Közélet
  SopronMedia
  Városháza
  Sport
Szórakozás
  Fesztiválgájd
  HangFal
  Mi1más
  Diákélet - diákszáj
  ViccGödör
Gazdaság
  Kereskedelmi és Iparkamara
Sport - szabadidő
  Sportcentrum
  Száguldó Cirkusz
Tudomány-technika
  Űrvadász
  Egészség
Környezet
  Borostyán
  Egészség

Dr. Bit  

Programozzunk együtt!

Rajzolás az egérrel
Miután megismerkedtél az egérkezeléssel, már könnyedén megérted a következő példaprogramot. A program folyamatosan lekérdezi az egér pozícióját és, ha lenyomták a bal gombot, akkor oda kirak egy fehér színű kört. Azonban az egérkurzornak van egy hátránya: ha egy területre úgy rajzolsz, hogy ott van, akkor ott az eredeti képernyőtartalom marad meg: itt például a kör körülbeül egynegyede hiányoznia fog a fekete háttér miatt. Hogyan lehet ezt megoldani? Nem is olyan nehéz: Ha a felhasználó lenyomta a bal gombot, akkor nem csak rögtön kirakjuk a kört, hanem előtte a kurzort áthelyezzü a képernyő más részébe, majd kirajzoljuk a kört, és végül visszahelyezzük a kurzort. Az átpozícionálás akkor a legjobb, ha olyan helyet adsz meg, amely semmiképpen nem lehet látható: például lekérdezed a maximális X pozíciót, és hozzáadsz 50-et. A maximális képernyőpozíciót a 'getmaxx()' függvénnyel kérdezheted le. Én most az egyszerűség kedvéért az x=1, y=1 pozícióra helyeztem át. Az áthelyezés előtt azonban érdemes egy-egy változóba elmenteni a CX és DX értékét(X és Y pozíció), mivel lehetséges, hogy az ehérkezelő megszakítás módósítja őket, így rossz helyre raknánk vissza a kurzor, ami, ha nem is tragédia, de azért hosszú távon elég idegesítő. A kört most nem 'circle()' utasítással rajzoltattam kim - mivel így nem adható meg kitöltési minta - hanem egy 'sector()' utasítással, ami így használva ugyanúgy kört eredményez. Most nézd át a példaprogramot, így jobban megérted majd az elméletet:
/* *** EGER4.C - Egy egyszeru grafikus peldaprogram C -re. *** */ /* *** A programmal egyszeru rajzokat keszithetsz egerrel. *** */ #include /* printf() */ #include /* int86() */ #include /* getch() */ #include /* grafikai rutinok */ /* *** Az altalunk irt egervezerlo. *** */ #define EGER(k,l,m,n); inregs.x.ax=k; inregs.x.bx=l; inregs.x.cx=m; inregs.x.dx=n; int86(0x33,&inregs,&outregs); AX=outregs.x.ax; BX=outregs.x.bx; CX=outregs.x.cx; DX=outregs.x.dx; /* *** MAIN *** */ void main(void) { union REGS inregs, outregs; /* Az eger hasznalatahoz KELL! */ int AX,BX,CX,DX; /* Az eger hasznalatahoz KELL! */ int oldx,oldy; EGER(0,0,0,0); /* Inici ljuk az egeret. */ if(!AX) { printf("nHiba: Nem talaltam egerdrivert!nAz eger nem inicialhato!n"); /* *** Nem talaltunk egeret. Kilepes *** */ return; } int gdriver = VGA, gmode=VGAHI, errorcode; initgraph(&gdriver, &gmode, ""); /* Inici ljuk a grafukus rendszert. */ errorcode = graphresult(); if (errorcode != grOk) /* Hiba eset‚n kilepunk. */ { printf("Grafikus hiba: %sn", grapherrormsg(errorcode)); return; } EGER(1,0,0,0); /* Legyen lathato az egerkurzor. */ outtextxy(3,5,"Egerhasznalat demo. A kilepeshez kattints a JOBB egergombbal!"); while (BX!=2) /* A jobb gombal valo kattintasig ismetles. */ { EGER(3,0,0,0); /* Egerkurzor lekerdezese. */ if(BX==1) { setcolor(WHITE); setfillstyle(SOLID_FILL,WHITE); oldx=CX; /* Mentjuk az eger X poziciojat. */ oldy=DX; /* Mentjuk az eger Y poziciojat. */ EGER(4,0,1,1); /* Az egerkurzor athelyezese. */ sector(oldx,oldy,0,360,5,5); /* A kor kirajzolasa. */ EGER(4,0,oldx,oldy); /* Az egerkurzor visszahelyezes */ } } EGER(2,0,0,0); /* Ne legyen lathato az egerkurzor. */ closegraph(); /* A grafikus rendszer lezarasa. */ return; } /* Peldaprogram vege. */
Hogy mi az értelme ennek? Gondolj bele, például írsz egy programot, aminek grafikus felülete van. Sokkal egyszerűbb megrajzolni az egérrel a hátterét, ezt elmenteni, és végül a programba egy saját rutinnal behívni, és kirajzolni. Egy olyan programrészt, ami ugyanezt eredményezné, csak kemény munkával lehetne megalkotni. Hát mostanra ennyit! A következő alkalommal a grafikus képernyő elmentésével fogok foglalkozni. PET



2000. április 13., csütörtök 00:00


címlap zóna archívum




© 1999-2007, Internet Sopron Egyesület