Traitement d'événement :
ButtonPress

/* 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;            
    } 
  } 
}

les EVENEMENTS en détail sur BUTTON

Exécution :

- 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.

Fonctionnement de ce programme:

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.

Exercices

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