MAUSSTEUERUNG IN QUICK C ...by The Real Adok Welche Merkmale zeichnen gute Programme aus? Natrlich eine gute Programm- idee, viele Anwendungsm”glichkeiten und eine einfache Bedienung. Zu der ein- fachen Bedienung z„hlt vor allem Maussteuerung, die in fast allen Programmen realisiert ist. Doch wie funktioniert Maussteuerung? Dazu muá man sich ein wenig mit der maschinennahen Programmierung auskennen. Es gibt einen eigenen Mausinterrupt, der die Nummer 33h hat. Dieser Interrupt besitzt viele Unterfunktionen, die - wie bei allen Interrupts - im AX-Register gew„hlt werden k”nnen. Ich z„hle hier nur die wichtigsten Unterfunktionen auf: Unterfunktion 0: Initialisiert den Maustreiber. Nachdem man in den gewnschten Bildschirmmodus gewechselt hat, muá man diese Ufo (Abkrzung fr Unter- funktion :-)) aufrufen. Unterfunktion 1: Der Mauscursor wird auf dem Bildschirm angezeigt. Je nachdem, ob man sich im Text- oder im Grafikmodus befindet, wird der Mauscursor als Zeichen (ASCII-Code 291) oder als Pfeil (wie in Windoofs) angezeigt. Unterfunktion 2: Damit schleicht sich der Mauscursor wieder. Unterfunktion 3: Mit dieser Ufo kann man die Mauskoordinaten und die Maus- tasten abfragen. In CX wird die X-, in DX die Y-Koordinate zurckgegeben. In BX steht dann ein Wert, der angibt, welche Tasten gedrckt wurden. Es gibt folgende M”glichkeiten: 0 = keine Taste 4 = mittlere Maustaste 1 = linke Maustaste 5 = mittlere und linke Maustaste 2 = rechte Maustaste 6 = mittlere und rechte Maustaste 3 = beide Maustasten 7 = alle drei Maustasten So, mit diesen Infos máte es kein Prob mehr sein, Maussteuerung in jeder beliebigen Prospe zu realisieren. Wichtig: Der Mausinterrupt funktioniert nur dann einwandfrei, wenn ihr einen Maustreiber von Microsoft benutzt (entweder MOUSE.COM oder MOUSE.SYS)! Es folgt noch ein von mir gecodetes Demoprogramm, welches zeigt, wie Maus- steuerung in Quick C funktioniert. Viel Spaá mit den M„uschen wnscht euch Euer The Real Adok. ______________________________________________________________________________ /* Mauslibrary in Quick C Copyright (C) 1996 by The Real Adok Wer diese Routinen in seine eigene Programme einbauen will, wendet sich bitte an: The Real Adok Claus-Dieter Volko Hungereckstraáe 60/2 A-1230 Wien */ #include // STDIO.H wird nur fr das Demoprogramm ben”tigt! #include // GRAPH.H wird nur fr das Demoprogramm ben”tigt! #include union REGS reg; // Speicherung der Register unsigned char mouseleftbutton, // linke Maustaste mouserightbutton; // rechte Maustaste unsigned short mousex, // X-Koo. der Maus mousey; // Y-Koo. der Maus void screen(char nr); void initmouse(void); void showmouse(void); void hidemouse(void); void screen(char nr) { reg.x.ax=nr; // In Bildschirmmodus 'nr' wechseln int86(0x10,®,®); } void initmouse(void) { reg.x.ax=0x0; // Maustreiber initialisieren int86(0x33,®,®); } void showmouse(void) { reg.x.ax=0x1; // Mauscursor anzeigen int86(0x33,®,®); } void hidemouse(void) { reg.x.ax=0x2; // Mauscursor verstecken int86(0x33,®,®); } void getmousestatus(void) { reg.x.ax=0x3; // Mausstatus ermitteln int86(0x33,®,®); mousex=reg.x.cx; mousey=reg.x.dx; switch(reg.x.bx) { case 0: mouseleftbutton=mouserightbutton=0; break; case 1: mouseleftbutton=1; mouserightbutton=0; break; case 2: mouseleftbutton=0; mouserightbutton=1; break; case 3: mouseleftbutton=mouserightbutton=1; break; } } // ********** DEMOPROGRAMM ********** main() { screen(0x12); // Bildschirmmodus 12 initmouse(); // Maustreiber initialisieren showmouse(); // Mauscursor anzeigen // Meldung auf dem Bildschirm ausgeben printf("Mauslibrary in Quick C\n"); printf("Copyright (C) 1996 by The Real Adok\n\n"); /* Schleife wird solange ausgefhrt, bis beide Maustasten gleichzeitig gedrckt werden */ while(getmousestatus(), mouseleftbutton!=1 || mouserightbutton!=1) { _settextposition(4,1); printf("X-Koordinate: %u \n",mousex); printf("Y-Koordinate: %u \n",mousey); printf("Linke Taste : %u \n",mouseleftbutton); printf("Rechte Taste: %u \n",mouserightbutton); } hidemouse(); // Mauscursor verstecken screen(0x2); // Textmodus } ______________________________________________________________________________