Previous: ピクスマップのテクニック
Up: Xウィンドウ実習
第6回 マウスからイベントを受け取る

Previous Page: ピクスマップのテクニック
Next Page: Xウィンドウ・プログラミング
第6回 イベント処理とイベント構造体 その2

マウス操作によるウィンドウの移動

今度はもう少し複雑なイベント処理です。マウスで指定したウィンドウ を移動させます。 ソース・ファイル名は event3.c としてください。

event3.c

#include<stdio.h>
#include<X11/Xlib.h>
#include "moyou"                     /* ビットマップデータ */
main()
{
 Display *dsp;                       /* ディスプレイ構造体の宣言 */
 Window   win, card[8];             /* ウィンドウ構造体の宣言 */
 Pixmap   pix;                       /* ピクスマップの宣言 */
 Colormap cmap;                      /* カラーマップの宣言 */
 XColor   iro1, iro2, dummy;         /* カラー構造体の宣言 */
 XEvent   eve;                       /* イベント構造体の宣言 */
 int  i;

dsp = XOpenDisplay( NULL ); /* ディスプレイのオープン */

cmap = DefaultColormap( dsp, 0 ); /* カラーマップを得る */

/* カラーマップから色を得る */ XAllocNamedColor( dsp, cmap, "green4", &iro1, &dummy ); XAllocNamedColor( dsp, cmap, "DarkSeaGreen2", &iro2, &dummy );

/* ウィンドウの生成 */ win = XCreateSimpleWindow( dsp, DefaultRootWindow(dsp), 0, 0, 640, 400, 1, BlackPixel(dsp,0), WhitePixel(dsp,0) );

/* ピクスマップの生成 */ pix = XCreatePixmapFromBitmapData( dsp, win, moyou_bits, moyou_width, moyou_height, iro1.pixel, iro2.pixel, 8 );

/* サブウィンドウの生成 */ for( i=0 ; i<8 ; i++ ) { card[i] = XCreateSimpleWindow( dsp , win, 80-3*i, 80-3*i, 72, 128, 2, BlackPixel(dsp,0), WhitePixel(dsp,0) );

XSetWindowBackgroundPixmap( dsp, card[i], pix ); }

XStoreName( dsp, win, "トランプ その2" ); /* タイトルの設定 */

/* イベントマスクの設定 */ XSelectInput( dsp, win, ButtonPressMask );

XMapWindow( dsp, win ); /* ウィンドウの表示 */ XMapSubwindows( dsp, win ); /* サブウィンドウの表示 */ XFlush( dsp );

/* イベント処理の無限ループの開始 */ while( True ) { XNextEvent( dsp, &eve ); /* 新しいイベントを受け取る */ switch( eve.type ) /* イベントの種類で処理を選択 */ { case ButtonPress : switch( eve.xbutton.button ) /* ボタン番号で処理を選択 */ { case 1: i = (i+1)%8; /* カードの番号を1だけ増やす */ XMoveWindow( dsp, card[i], eve.xbutton.x, eve.xbutton.y ); break; case 3: XCloseDisplay( dsp ); /* ディスプレイのクローズ */ exit(0); /* 終了 */ default: break; } default: break; } } }


プログラムができたら、コンパイルして実行してみましょう。
うまくいった人は次の課題に挑んでみてください。

maruyama@wakhok.ac.jp
1995年02月01日 (水) 00時21分18秒 JST