○イベント
■どこのウィンドウから発せられたイベントかを判定するには
event.xany.window にイベント元のWindow変数が入ってきます
▼以下のように判定します
if(button==event.xany.window){//ボタンのイベントかどうかの判定
XSetWindowBorderWidth( d, event.xany.window, 1 );//ボーダーラインを1にする
}
■Expose イベント
再描画要求です
XEvent event;
//イベントマスクを登録
XSelectInput( d, w, ExposureMask );
while(1){
XNextEvent( d, &event );
switch(event.type){
case Expose://再描画要求
printf("Expose\n");
break;
default:
break;
}
}
■ButtonPressed イベント
マウスボタンが押された時に送られます
XEvent event;
//イベントマスクを登録
XSelectInput( d, w,ButtonPressMask);
while(1){
XNextEvent( d, &event );
switch(event.type){
case ButtonPress://画面上でマウスのボタンが押された時
printf("ButtonPress\n");
printf("x=%d y=%d\n",event.xbutton.x,event.xbutton.y);
if(event.xbutton.button==1) printf("left\n");
if(event.xbutton.button==2) printf("center\n");
if(event.xbutton.button==3) printf("right\n");
if(event.xbutton.button==4) printf("ホイールを上に\n");
if(event.xbutton.button==5) printf("ホイールを下に\n");
printf("\n");
default:
break;
}
}
■ButtonRelease イベント
マウスボタンが離されたときに送られます
XEvent event;
//イベントマスクを登録
XSelectInput( d, w,ButtonPressMask | ButtonReleaseMask);
while(1){
XNextEvent( d, &event );
switch(event.type){
case ButtonRelease://画面上でマウスのボタンが離された時
printf("ButtonRelease\n");
printf("x=%d y=%d\n",event.xbutton.x,event.xbutton.y);
if(event.xbutton.button==1) printf("left\n");
if(event.xbutton.button==2) printf("center\n");
if(event.xbutton.button==3) printf("right\n");
if(event.xbutton.button==4) printf("ホイールを上に\n");
if(event.xbutton.button==5) printf("ホイールを下に\n");
printf("\n");
default:
break;
}
}
■MotionNotify イベント
マウスが動いた時に送られます
XEvent event;
//イベントマスクを登録
XSelectInput( d, w,PointerMotionMask);
while(1){
XNextEvent( d, &event );
switch(event.type){
case MotionNotify:
printf("MotionNotify\n");
printf("x=%d y=%d\n",event.xmotion.x,event.xmotion.y);
printf("\n");
default:
break;
}
}
■ドラッグイベント
XEvent event;
//イベントマスクを登録
XSelectInput( d, w,ButtonPressMask | ButtonMotionMask);
while(1){
XNextEvent( d, &event );
switch(event.type){
case MotionNotify:
printf("MotionNotify\n");
printf("x=%d y=%d\n",event.xmotion.x,event.xmotion.y);
printf("\n");
default:
break;
}
}
■マウスがウィンドウに出入りした時のイベント
EnterNotify イベント
マウスがあるウィンドウに入った時に送られます
LeaveNotify イベント
マウスがあるウィンドウから出た時に送られます
XEvent event;
//イベントマスクを登録
XSelectInput( d, w,EnterWindowMask | LeaveWindowMask);
while(1){
XNextEvent( d, &event );
switch(event.type){
case EnterNotify:
printf("マウスが入った\n");
XFlush( d );
break;
case LeaveNotify:
printf("マウスが出た\n");
XFlush( d );
break;
default:
break;
}
}
■KeyPress イベント
キーボードのキーがウインドウ内で押されたときに送られます
KeySym key;
char strbuf[10];
XEvent event;
//イベントマスクを登録
XSelectInput( d, w,KeyPressMask);
while(1){
XNextEvent( d, &event );
switch(event.type){
case KeyPress:
XLookupString((XKeyEvent *)&event, strbuf, sizeof(strbuf), &key, NULL);
printf("%s\n",strbuf);
break;
default:
break;
}
}
■KeyRelease イベント
キーボードのキーがウインドウ内で離された時に送られます
KeySym key;
char strbuf[10];
XEvent event;
//イベントマスクを登録
XSelectInput( d, w,KeyReleaseMask);
while(1){
XNextEvent( d, &event );
switch(event.type){
case KeyRelease:
XLookupString((XKeyEvent *)&event, strbuf, sizeof(strbuf), &key, NULL);
printf("%s\n",strbuf);
break;
default:
break;
}
}
▲トップページ
>
Linux と C