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;
}
}
}