Xlib 編 (2)

前へ << Xlib 編 (1) Xlib 編 (3) >> 次へ

仕様

では、次にキー入力・マウス入力などに対応しよう。 仕様としては以下のプログラムを作る。

イベントマスクを設定

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: }

前へ << Xlib 編 (1) Xlib 編 (3) >> 次へ

$Id: xlib-2.html,v 1.1 2004/05/29 11:35:49 68user Exp $