/* 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; } } }
Bougez votre souris de la fenêtre à la sous-fenêtre.
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".
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 |