○ボタンを作る
▼初期状態
▼押すと、ボタンのラインが太くなります
#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