Previous: 準備
Up: Xウィンドウ実習
第6回 マウスからイベントを受け取る

Next: ピクスマップのテクニック
Previous Page: 準備
Next Page: ピクスマップのテクニック

イベント処理の基本

イベントを処理して、マウスからの入力を行なうプログラムです。 イベントを扱うためには、イベント構造体 XEvent が必要です。 そしてプログラムの後半は、イベントを処理するための無限ループになります。 (ソース・ファイル名は event1.c としてください。)

event1.c

#include<stdio.h>
#include<X11/Xlib.h>
#include "zou"                       /* ビットマップデータ */
main()
{
 Display *dsp;                       /* ディスプレイ構造体の宣言 */
 Window   win;                       /* ウィンドウ構造体の宣言 */
 Pixmap   pix;                       /* ピクスマップ構造体の宣言 */
 GC       gc;                        /* GC構造体の宣言 */
 XEvent   eve;                       /* イベント構造体の宣言 */

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

/* ウィンドウの生成 */ win = XCreateSimpleWindow( dsp, DefaultRootWindow(dsp), 0, 0, 800, 600, 1, BlackPixel(dsp,0), WhitePixel(dsp,0) ); /* ピクスマップの生成 */ pix = XCreatePixmapFromBitmapData( dsp, win, zou_bits, zou_width, zou_height, BlackPixel(dsp,0), WhitePixel(dsp,0), 8 );

gc = XCreateGC( dsp, win, NULL, NULL ); /* GCの生成 */

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

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

/* イベント処理の無限ループの開始 */ while( True ) { XNextEvent( dsp, &eve ); /* 新しいイベントを受け取る */ switch( eve.type ) /* イベントの種類で処理を選択 */ { case ButtonPress : switch( eve.xbutton.button ) /* ボタン番号で処理を選択 */ { case 1: /* 図形をコピー */ XCopyArea( dsp, pix, win, gc, 0, 0, zou_width, zou_height, 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