xlib-2.c
35: XSelectInput(display, window,
36: ExposureMask |
37: KeyPressMask |
38: KeyReleaseMask |
39: ButtonPressMask |
40: ButtonReleaseMask );
前回のプログラムは、Expose イベントのみを取得すればよかったが、
今回は KeyPress,KeyRelease,ButtonPress,ButtonRelease イベントも受け取る。
そのため、それらに対応するイベントマスクを | で繋げている。
42: while (1){
43: XEvent event;
44: KeySym key;
45: char string[10];
46: char buf[100];
47:
48: XNextEvent(display, &event);
49:
50: switch (event.type){
51: case Expose:
52: XDrawImageString(display, window, gc, 20, 20,
53: message, strlen(message));
54: break;
55:
56: case KeyPress:
57: XLookupString((XKeyEvent *)&event, string, sizeof(string), &key, NULL);
58: if ( string[0] == 'q' ){
59: goto FINISH;
60: }
61: sprintf(buf, "KEY PRESS! [%c]", string[0]);
62: XDrawImageString(display, window, gc, 20, 40,
63: buf, strlen(buf));
64: break;
65:
66: case KeyRelease:
67: XLookupString((XKeyEvent *)&event, string, sizeof(string), &key, NULL);
68: sprintf(buf, "KEY RELEASE! [%c]", string[0]);
69: XDrawImageString(display, window, gc, 20, 40,
70: buf, strlen(buf));
71: break;
72:
73: case ButtonPress:
74: sprintf(buf, "BUTTON PRESS! %d", event.xbutton.button);
75: XDrawImageString(display, window, gc, 20, 60,
76: buf, strlen(buf));
77: break;
78:
79: case ButtonRelease:
80: sprintf(buf, "BUTTON RELASE! %d", event.xbutton.button);
81: XDrawImageString(display, window, gc, 20, 60,
82: buf, strlen(buf));
83: break;
84: }
85: }
86:
87: FINISH:
88: XCloseDisplay(display);
89: }