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