○イベント



■どこのウィンドウから発せられたイベントかを判定するには

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