Pointer entrant/sortant d'une fenêtre

/* in_out.c */

/* pointeur entrant et sortant d'une sous-fenetre */

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

GC      gc; 
Display *display; 
int     screen; 
Window  win, subwin, root; 
unsigned long white_pixel, black_pixel;  
XSetWindowAttributes attrib;
unsigned long mask_attrib;
  
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, 300, 100, 5, black_pixel, white_pixel); 
  XSelectInput (display, win, ExposureMask); 
  XStoreName (display, win, "in_out"); 
  subwin = XCreateSimpleWindow (display, win,  
			    50, 30, 100, 30, 2, black_pixel, white_pixel); 
  XSelectInput (display, subwin, ExposureMask | EnterWindowMask |
		LeaveWindowMask);  
  XMapWindow (display, win);
  XMapWindow (display, subwin);  
 
  for (;;) { 
    XEvent ev; 
    XNextEvent (display, &ev); 
    switch (ev.type) { 
    case Expose : 
      if (ev.xexpose.window == win)
      XDrawString (display, win, gc, 10, 10, "Bienvenue sous win !", 20);    
      if (ev.xexpose.window == subwin)
      XDrawString (display, subwin, gc, 10, 10, "sous subwin", 11);    
      break; 
    case EnterNotify : 
      XClearWindow(display, subwin);
      XDrawString (display, subwin, gc, 10, 10, "EnterNotify", 11);    
     break;
     case LeaveNotify : 
      XClearWindow(display, subwin);
      XDrawString (display, subwin, gc, 10, 10, "LeaveNotify", 11);    
      break;
    default : 
      break;            
    } 
  } 
} 
 

Exécution :

Bougez votre souris de la fenêtre à la sous-fenêtre.

Fonctionnement de ce programme :

A chaque franchissement d'un bord de fenêtre, un événement XCrossingEvent est envoyé à la fenêtre quittée et un événement XCrossingEvent est envoyé à la fenêtre d'"arrivée".

Exercice in_out2.c :

Dans une fenêtre, creez 2 sous-fenêtres contenant chacune une sous-fenêtre. Chacune de ces 5 fenêtres affichera sur stdout le dernier événement de franchissement dont elle a été le siège.



programme suivant index général fonctions de la XLib événements types dans XLib