next up previous
Next: 9.4 C 曲線の表示 Up: 9 例題:Xwindow操作機能の追加 Previous: 9.2 引数をとる関数の定義

9.3 マウス操作イベントをとる例

リストデータを結果として返す関数の例として, Xwindowのマウスの状態を調べる関数の定義をすると すれば,以下のような形に書くことができます.

LVAL xmouse()
{
  LVAL arg1,arg2,val;
  int flg=0,x=0,y=0;
  XEvent        event;

  if (xlargc==2) {
    arg1= xlgetarg(); arg2 = xlgetarg();
    x = (int)getnumint(arg1);
    y = (int)getnumint(arg2);
  }
  xllastarg();
  while (XCheckMaskEvent( display,
                      XButtonPressMask | XButtonMotionMask,
                      &event ));
  xlsave1(val);
  x = event.xmotion.x;
  y = event.xmotion.y;
  val = NIL;
  val = cons(cvfixnum(y),val);
  val = cons(cvfixnum(x),val);
  if (event.type == ButtonPress) val = cons(true,val);
  else  val = cons(NIL,val);
  xlpop();
  return(val);
}
これは,
(flag num1 num2)
というような3つの要素をもつリストを返します.最初の要素はボタンが押さ れているかどうかで,T ならば押されている.NILならば押されていない.を 示します.num1,num2はウィンドウの中でマウスカーソルが動いている時には, そのマウスカーソルのx,yの座標値を示します.

generated through LaTeX2HTML. M.Inaba 平成18年5月6日