Previous: 準備
Up: Xウィンドウ実習
第6回 少し複雑なイベント処理

Next: 複数のウィンドウからのイベント
Previous Page: 準備
Next Page: 複数のウィンドウからのイベント

前回の復習

前回の授業で勉強したイベントを処理の基本を復習します。 event1.c または event2.c を元にすればすぐできるはずです。 ソース・ファイル名は event4.c としてください。

event4.c

#include<stdio.h>
#include<X11/Xlib.h>
#include "yours"                     /* ビットマップデータ */
#include "dash"                      /* ビットマップデータ */
main()
{
 Display *dsp;                       /* ディスプレイ構造体の宣言 */
 Window   win;                       /* ウィンドウ構造体の宣言 */
 Pixmap   pix, back_pix;             /* ピクスマップ構造体の宣言 */
 GC       gc;                        /* GC構造体の宣言 */
 XEvent   eve;                       /* イベント構造体の宣言 */
 Colormap cmap;                      /* カラーマップの宣言 */
 XColor   iro, dummy;                /* カラー構造体の宣言 */
 static char *win_name = "サービス スタンプ";

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

cmap = DefaultColormap( dsp, 0 ); /* カラーマップを得る */ /* カラーマップから色を得る */ XAllocNamedColor( dsp, cmap, "red2", &iro, &dummy);

/* ウィンドウの生成 */ win = XCreateSimpleWindow( dsp, DefaultRootWindow(dsp), 0, 0, 840, 640, 1, BlackPixel(dsp,0), WhitePixel(dsp,0) ); /* ピクスマップの生成 */ pix = XCreatePixmapFromBitmapData( dsp, win, yours_bits, yours_width, yours_height, iro.pixel, WhitePixel(dsp,0), 8 ); back_pix = XCreatePixmapFromBitmapData( dsp, win, dash_bits, dash_width, dash_height, BlackPixel(dsp,0), WhitePixel(dsp,0), 8 );

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

XStoreName( dsp, win, win_name ); /* タイトルの設定 */

XSetWindowBackgroundPixmap( dsp, win, back_pix ); /* 背景の模様を設定 */

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, yours_width, yours_height, eve.xbutton.x - yours_width/2, eve.xbutton.y - yours_height/2 ); break; case 2: XClearWindow( dsp, win ); /* ウィンドウのクリア */ break; case 3: XCloseDisplay( dsp ); /* ディスプレイのクローズ */ exit(0); /* 終了 */ default: break; } default: break; } } }


プログラムができたら、コンパイルして実行してみましょう。

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