/* button.c */ /* traite l'evenement ButtonPress */ #include <stdio.h> #include <X11/Xlib.h> GC gc; Display *display; int screen; Window win, root; unsigned long white_pixel, black_pixel; char buf[100]; main() { if ((display = XOpenDisplay ("")) == NULL) { fprintf (stderr, "Can't open Display\n"); exit (1); } gc = DefaultGC (display, screen); screen = DefaultScreen (display); root = RootWindow (display, screen); white_pixel = WhitePixel (display, screen); black_pixel = BlackPixel (display, screen); win = XCreateSimpleWindow (display, root, 0, 0, 200, 150, 2, black_pixel, white_pixel); XSelectInput (display, win, ExposureMask | ButtonPressMask); XStoreName (display, win, "button"); XMapWindow (display, win); for (;;) { XEvent ev; XNextEvent (display, &ev); switch (ev.type) { case Expose : XDrawString (display, win, gc, 10, 30, "coucou !", 8); break; case ButtonPress : sprintf(buf,"x=%3d,y=%3d", ev.xbutton.x, ev.xbutton.y); XDrawString (display, win, gc, ev.xbutton.x, ev.xbutton.y, buf, strlen(buf)); break; default : break; } } }
- Appuyez sur un bouton de la souris dans la fenêtre.
Masquez puis démasquez la fenêtre.
- Lancez 2 clients : premier et button pour mettre en évidence
la notion de serveur.
Le type XEvent est une union de tous les types (structure)
d'événements.
Tous les événements ont une cause : souris déplacée,
bouton enfoncé,,frappe au clavier, ...
Seuls sont recus et donc traités par le client, les événements
sélectionnés par ressource.
L'événement envoyé lorsqu'un bouton de la souris est enfoncé dans une fenêtre se nomme ButtonPress. La structure (le type) d'un tel événement est KeyEvent. La fenêtre "doit avoir" sélectionné l'événement par le masque ButtonPressMask. Le traitement associé içi est l'affichage des coordonnées de la souris au moment du cliquage et ceci est dessiné à l'endroit même.
L'événement envoyé lorsqu'une partie ou tout de la fenêtre devient visible à l'utilisateur est Expose. Dans la structure ExposeEvent est indiqué le rectangle (la zone) à rafraîchir. Le masque pour sélectionner cet événement est ExposureMask.
efface.c :
Ce programme aura le même fonctionnement que button.c mais,
à chaque enfoncement d'un bouton de la souris, la précédente
inscription est effacée.
rafraich.c :
Ce programme affichera "içi" à l'endroit
où le pointeur se trovait au moment du clic et, de plus,
à chaque re-Expose-ition de la fenêtre, les 10 dernières
inscriptions "ici" sont re-affichées.
programme suivant | index général | fonctions de la XLib | événements | types dans XLib |