前へ << Xlib 編 (1) | Xlib 編 (3) >> 次へ |
では、次にキー入力・マウス入力などに対応しよう。 仕様としては以下のプログラムを作る。
- キーボードの q キーを押すと終了
- それ以外のキーを押すと、押したキーを表示
- マウスボタンを押すと、どのボタンを押したかを表示
- マウスポインタの座標を逐次表示
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: }
前へ << Xlib 編 (1) | Xlib 編 (3) >> 次へ |