○ボタンを作る

▼初期状態


▼押すと、ボタンのラインが太くなります





#include<X11/Xlib.h>
#include<X11/Xutil.h>

unsigned long color(Display *display, char *color){
	Colormap cmap;
	XColor c0,c1;
	cmap = DefaultColormap(display,0);
	XAllocNamedColor(display,cmap,color,&c1,&c0);
	return c1.pixel;
}

main(){
	Display	*d;
	Window	w;
	Window button;
	int screen;
	XSetWindowAttributes attr;
	GC gc;
	
	d = XOpenDisplay( NULL );//Xサーバーに接続する
	screen=DefaultScreen(d);
	//ウインドウの作成
	w = XCreateSimpleWindow( d, RootWindow(d,screen),
						0, 0, 200, 200,//ウインドウのサイズ
						1,BlackPixel(d,screen),//枠の設定
						WhitePixel(d,screen));//背景色の色番号

	//ボタン作成----------------------------------------------------------------------
	//ウィンドウをウインドウの中に作成してボタンにする
	button=XCreateSimpleWindow( d, w,
							100, 100, 40, 20,//ウインドウのサイズ
							1,color(d,"rgb:20/20/ff"),//枠の設定
							WhitePixel(d,screen));//背景色の色番号
	//マップして表示
	XMapWindow( d, button );
	//イベントマスクを登録
	XSelectInput( d, button,ButtonPressMask | ButtonReleaseMask); 
	//----------------------------------------------------------------------

	//ウィンドウの内容を記憶
	attr.backing_store = WhenMapped;
	XChangeWindowAttributes( d, w, CWBackingStore, &attr); 

	//ウインドウ名の設定
	XStoreName(d, w, "test Window");
	XSetIconName(d, w, "test Window");
	
	//グラフィックコンテキストを取得
	gc = XCreateGC( d, RootWindow( d,screen ), 0, 0); 
	
	XEvent event;
	//イベントマスクを登録
	XSelectInput( d, w,ExposureMask); 

	//マップして表示
	XMapWindow( d, w );
	XFlush( d );


	while(1){
		XNextEvent( d, &event );
		switch(event.type){
			case Expose:
				{
					char*str="test";
					int width=10;
					int height=15;
					XDrawString( d, button, gc, width, height, str, strlen(str));
					XFlush( d );
				}
				break;
			case ButtonPress://画面上でマウスのボタンが押された時
				if(button==event.xany.window){//ボタンのイベントかどうかの判定
					XSetWindowBorderWidth( d, event.xany.window, 2 );//ボーダーラインを太くする
				}
				XFlush( d );
				break;
			case ButtonRelease://画面上でマウスのボタンが離された時
				if(button==event.xany.window){//ボタンのイベントかどうかの判定
					XSetWindowBorderWidth( d, event.xany.window, 1 );//ボーダーラインを細くする
				}
				XFlush( d );
				break;
			default:
				break;
		}
	}

}






▲トップページ > Linux と C