○ウィンドウの閉じるボタンが押された時の処理を書く
処理を書かないと、×ボタンを押すとアプリケーションが自動的に終了します
処理を書くと、アプリケーションの終了なども、自分で書かないといけません
イベントを書かないと、×を押しても、プログラムは終了しません。
■ウィンドウシステムのプロパティの変更
Atom atom1,atom2;
atom1 = XInternAtom(d, "WM_PROTOCOLS", False);
atom2 = XInternAtom(d, "WM_DELETE_WINDOW", False);
XSetWMProtocols(d, w, &atom2,1);
▼×ボタンを押された時のイベントを記述する
case ClientMessage:
//閉じるボタンを押されたイベントを識別
if ( event.xclient.message_type == atom1 && event.xclient.data.l[0] == atom2 ){
//終了処理
XCloseDisplay(d);
exit(0);
}
break;
■×ボタンを押してもtestと出力して終了しないプログラム
#include<X11/Xlib.h>
#include<X11/Xutil.h>
//描画メソッド
void paint(Display*d,Window w,int screen,GC gc){
Colormap colormap;
XColor near_color, true_color;
//色の変更
colormap = DefaultColormap( d, screen );
XAllocNamedColor( d, colormap, "red", &near_color, &true_color );
XSetForeground( d, gc, near_color.pixel );
//塗りつぶした四角を描画
XFillRectangle(d,w,gc,10,10,180,180);
XFlush( d );
}
main(){
Display *d;
Window w;
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));//背景色の色番号
//ウィンドウの内容を記憶
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,ButtonPressMask | ExposureMask);
//ウィンドウシステムのプロパティの変更
Atom atom1,atom2;
atom1 = XInternAtom(d, "WM_PROTOCOLS", False);
atom2 = XInternAtom(d, "WM_DELETE_WINDOW", False);
XSetWMProtocols(d, w, &atom2,1);
//マップして表示
XMapWindow( d, w );
XFlush( d );
while(1){
XNextEvent( d, &event );
switch(event.type){
case ButtonPress://画面上でマウスのボタンが押された時
XDestroyWindow( d, w);//終了処理
XCloseDisplay( d );
exit(0);
case Expose://再描画要求
paint(d,w,screen,gc);//再描画
break;
case ClientMessage:
//閉じるボタンを押されたイベントを識別
if ( event.xclient.message_type == atom1 && event.xclient.data.l[0] == atom2 ){
printf("test\n");
//XCloseDisplay(d);
//exit(0);
}
break;
default:
break;
}
}
}
▲トップページ
>
Linux と C