ein Kapitel zurück                                           ein Kapitel weiter

Ein häufiges Problem in der Textkonsole ist das der Pointer, wenn den so nennen darf, der beim Neuzeichnen des Bildschirmes verschwindet. Um dies zu vermeiden empfehle ich Ihnen das Makro.....

int GPM_DRAWPOINTER(Gpm_Event *event);  

Diese Funktion setzen sie so ein............

int Maushandler(Gpm_Event *event, void *data)
{
  if(event->margin &GPM_TOP)
     printf("Der Cursor ist noch oben weg\n");
  GPM_DRAWPOINTER(event);
  return 0;
}  

Das ganze lässt sich aber noch einfacher erreichen in dem sie die globale Variable gpm_visiblepointer auf 1 setzen. Dann wird der Mauszeiger immer angezeigt. So da wir jetzt mehrer Möglichkeiten von Ereignisse kennen die es gilt abzufangen wollen wir auch noch ein Beispiel dazu bringen................

/*Download:gpm3.c*/
#include <stdio.h> #include <gpm.h> int my_handler(Gpm_Event *event, void *data) { gpm_visiblepointer=1; /*Mauscursor immer vorhanden*/ if(event->buttons & GPM_B_LEFT) if(event->type & GPM_DOWN) printf("Linker Button gedrückt: "); else if(event->type & GPM_UP) printf("Linker Button losgelassen: "); if(event->buttons & GPM_B_RIGHT) if(event->type & GPM_DOWN) printf("Rechter Button gedrückt: "); else if(event->type & GPM_UP) printf("Rechter Button losgelassen: "); if(event->buttons & GPM_B_MIDDLE) if(event->type & GPM_DOWN) printf("Mittlerer Button gedrückt"); else if(event->type & GPM_UP) printf("Mittlerer Button losgelassen"); printf(" an Position %d %d ",event->x, event->y); if(event->type &GPM_SINGLE) printf(" -> Einfacher Klick"); if(event->type &GPM_DOUBLE) printf(" -> Doppelter Klick"); if(event->type &GPM_TRIPLE) printf(" -> Dreifacher Mausklick"); if(event->buttons & GPM_B_LEFT || event->buttons & GPM_B_RIGHT || event->buttons & GPM_B_MIDDLE) printf("\n"); return 0; } int main() { Gpm_Connect connect; int c; connect.eventMask = ~0; /*Alle Mausereignisse*/ connect.defaultMask = 0; /*Nichts geht an gpm*/ connect.minMod = 0; /*Es müssen keine Tasten gedrückt werden*/ connect.maxMod = ~0; /*Es dürfen aber alle Tasten gedrückt werden*/ if(Gpm_Open(&connect, 0) == -1){ /*Verbindung zu gpm öffnen*/ printf("Kann keine Verbindung zum Mouseserver herstellen\n"); exit(0); } gpm_handler = my_handler; /*Handler initialisieren*/ while((c = Gpm_Getc(stdin)) != EOF) printf("%d\n", c); Gpm_Close(); return 0; }

Ein weiteres Beispiel mit Abfangen von Tastatur und Mausdrucks also event->button und event->modifiers.....

/*Download:gpm4.c*/
#include <stdio.h> #include <gpm.h> #include <linux/keyboard.h> int my_handler(Gpm_Event *event, void *data) { gpm_visiblepointer=1; if(event->type & GPM_DOWN) /*wurde eine Moustaste gedrückt*/ { if(event->modifiers & (1 << KG_SHIFT)) printf("Beide Shift + "); if(event->modifiers & (1 << KG_CTRL)) printf("Beide Ctrl + "); if(event->modifiers & (1 << KG_ALT)) printf("Linke Alt + "); if(event->modifiers & (1 << KG_ALTGR)) printf("Rechte Alt + "); if(event->modifiers & (1 << KG_SHIFTL)) printf("Linke Shift + "); if(event->modifiers & (1 << KG_SHIFTR)) printf("Rechte Shift + "); if(event->modifiers & (1 << KG_CTRLL)) printf("Linke Ctrl + "); if(event->modifiers & (1 << KG_SHIFTR)) printf("Rechte Ctrl + "); if(event->modifiers & (1 << KG_CAPSSHIFT)) printf("Capslock + "); if(event->buttons & GPM_B_LEFT) printf(" Linker Mousebutton\n"); if(event->buttons & GPM_B_RIGHT) printf(" Rechter Mousebutton\n"); if(event->buttons & GPM_B_MIDDLE) printf(" Mittlerer Mousebutton\n "); } return 0; } int main() { Gpm_Connect connect; int c; /*Wir interessieren uns für eine gedrückte Maustaste*/ connect.eventMask = GPM_DOWN; /*Alle Ergebnisse weitergeben die unser Programm nicht verarbeitet*/ connect.defaultMask = GPM_MOVE; /*Alle Ereignisse bei denen mindestens eine Shift-Taste gedrückt wurde*/ connect.minMod = 1 << KG_SHIFT; connect.maxMod = ~0; if(Gpm_Open(&connect, 0) == -1) { printf("Kann keine Verbindung zum Mouseserver herstellen\n"); exit(0); } gpm_handler = my_handler; while((c = Gpm_Getc(stdin)) != EOF) printf("%d\n", c); Gpm_Close(); return 0; }

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf