CyberPress.Sopron

(http://www.cyberpress.hu/)

Rovat: Dr. Bit

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


Újra indul a Dr. Bit.

Egérkezelés C, C++ nyelvekben.

Mielõtt belevágnánk, néhány dolog a C és a C++ kapcsolatáról:
A C++ a C egyfajta kiegészítése, továbbfejlesztése. Több olyan dolgot 
könnyedén megvalósíthatunk vele, ami C-ben 
elég nehéznek tûnhet. Ez nem azt jelenti, hogy a C rosszabb, mint a 
C++, hiszen a C a C++ nyelv "õse", 
a C++ alapjai a C-n nyugszanak. 

A C gyökerei egészen a 60-as évekre nyúlnak vissza, amikor Martin 
Richards megalkotta a BCPL-t, majd ezt 
továbbfejlesztve Ken Thompsonnak köszönhetõen megszületett a B, amibõl 
Dennis Ritchie megalkotta a C-t, ami 
mostanra annyira befutott, hogy ebben írják az UNIX-ot és a Linuxot, 
az újabb MS-DOS-okat, C-ben készült a DOOM,
és még sok más program.

A C++ szerintem nagyon alkalmas arra, hogy valaki elkezdjen 
programozni. Ez nem azt jelenti, hogy a C++ egy, 
a kezdõk számára létrehozott nyelv (mint pl. a BASIC), viszont az 
elsajátítása nem különösen nehéz.


A következõkben körülbelül havonta fogok cikkeket írni a C-rõl, 
illetve a C++-ról. Igyekszem majd hasznos, érdekes
programozási témákat, feladatokat leírni, elmagyarázni. Feltételezem, 
hogy már ismered valamelyest a C-t, vagy C++-t. 
Az elsõ téma az egérkezelésrõl szól, két részben, a másik fele a 
következõ cikkben fog megjelenni. Remélem, 
tudok majd segíteni a C++ nyelv jobb megértésében, használatának 
könnyebbé tételében, és jó programok készítésében.

                                                                      
                    
                                                                
                A Szerzõ


Az elsõ téma:


                                Az egér használata C++-ban 
                      avagy hogyan fogjuk munkára a 
"cincogót" DOS alatt?

Ez a módszer ugyanúgy használható C-ben, illetve C++ -ban 
Legelõször is illeszd be a forráskódba következõt, az #include 
utasítások után:

#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; 

Most már csak azokba a függvényekbe kell bemásolnod a következõket, 
amelyekkel vezéreltetni akarod az egeret:

union REGS inregs, outregs;
int AX,BX,CX,DX;

Így most van egy egérkezelõ programrészed. Ezzel most már könnyedén 
vezérelheted az egeret.
Használatára példa: 
        Egér iniciálása: EGER(0,0,0,0); (Ha sikertelen AX=0 -val tér 
vissza)
        Egérkurzor láthatóvá tétele: EGER(1,0,0,0);
        Egérkurzor láthatatlanná tétale: EGER(2,0,0,0);
(A többi funkcióról majd következõ alkalommal!)

Írj egy programot, ami iniciálja és láthatóvá teszi az egerkurzort(ha 
nem iniciálható, kilép)
majd egy billentyû lenyomásáig várakozik:
A megoldása: 

/* *** EGER1.C - Egy egyszeru egerkezelo peldaprogram. *** */
#include<stdio.h>                  /* printf() */
#include<dos.h>                    /* int86()  */
#include<conio.h>                  /* getch()  */

/* *** 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!!! */

EGER(0,0,0,0);
if(!AX)
  {
  printf("nHiba: Nem talaltam egerdrivert!nAz eger nem 
inicialhato!n");
  /* *** Nem talaltunk egeret. Kilepes *** */
  return;
  }

EGER(1,0,0,0);                    /* Legyen lathato az egerkurzor. */

printf("Egerhasznalat demo. A kilepeshez nyomj le egy 
billentyut!");

getch();                          /* Varakozas egy billentyure. */
EGER(2,0,0,0);                    /* Ne legyen lathato az egerkurzor. 
*/

return;                           /* Kilepes */
}
/* *** Peldaprogram vege. ***/

Hát mostanra ennyi. A többit a következõ alkalommal! (kb. 1 hónap 
múlva)
Akkorra ígérem, hogy meglesz a funkciókód-táblázat!