ウインドウシステム イベント処理関数仕様 version 2.23 Copyright T.Kobayashi 1991.5.3  ウインドウを新たにオープンするとイベント処理関数を設定する必要があります。 ウインドウを描き直す必要が生じた時、ウインドウが移動した時、マウス、キー入力 の外部的なイベントが発生した時などにイベント処理関数が呼び出されます。 [例] int EventExec( wp, info ); WindowID wp ; /* ウインドウID */ EventInfo *info ; /* イベント情報 */ { int n ; DrawBuf buf[10] ; switch( info->option ) /* イベントの種類 */ { case EventOpen : /* ウインドウのオープン時に発生 */ DrawSetClear( buf, 1 ); DrawSetLine( buf+1, .... ); ... ... WindowRedraw( wp ); return( TRUE ); case EventRedraw : /* 描き直し */ ... ... WindowDraw( wp, buf, n ); return( TRUE ); case EventClose : /* クローズボックスが押された時 */ WindowClose( wp ); WindowConnectionClose(); return( TRUE ); case EventMouseSwitch : /* マウスが押された時 */ ... ... return( TRUE ); } return( FALSE ); }  (注意)イベント処理関数はウインドウがイベントを受け取った時は TRUE 、受け 取らなかった時はFALSE を返します。 EventInfo は wlib.h で次のように定義されています。 typedef struct { EventOption option ; /* イベントの種類 */ int x, y, h, v ; /* 座標、大きさ */ int RightStat, LeftStat ; /* スイッチの状態 */ int LeftON, LeftOFF ; /* スイッチの変化 */ int RightON, RightOFF ; int MoveFlag ; /* マウスの移動 */ int KeyCode ; /* キーコード */ int ShiftStat ; /* シフトキーの状態 */ int Counter ; /* カウンタ */ int ComData ; /* 通信データ */ void *ComBuffer ; /* 通信バッファ */ } EventInfo ; typedef enum { EventOpen, /* 初期化 */ EventRedraw, /* 描き直し */ EventClose, /* クローズ */ EventPop, /* ポップ */ EventPush, /* プッシュ */ EventMove, /* 移動 */ EventResize, /* 変形 */ EventIconify, /* アイコン化 */ EventZoom, /* 拡大 */ EventScroll, /* スクロール */ EventMouseSwitch, /* マウスのスイッチ */ EventMouseMove, /* マウスの移動 */ EventMouseEnter, /* マウスの移動 */ EventMouseOut, /* マウスの移動 */ EventKey, /* キー入力 */ EventInterval, /* タイマイベント */ EventNon, /* イベントなし */ EventUser, /* ユーザイベント */ EventGraphic, /* グラフィックモード */ } EventOption ; 以下にイベントの種類ごとに発生する条件とその時に設定される EventInfo のパラ メータを示します。ただし、発生する条件を満たしていてもそのイベントに対する イベント属性が設定されていなければこれらのイベントは発生しません。 EventOpen  ウインドウがオープンされた時に、一度だけ発生するイベントです。イベント 処理ルーチン内ではウインドウの各種パラメータの初期化を行わなければなりま せん。まだ画面に表示されていないので WindowDraw 関数は実行できません。最 後に WindowRedraw 関数を実行するとオープンするとオープンすると同時に表示 されるようになります。  x , y はウインドウの左上座標、h , v はウインドウの大きさです。 EventRedraw  ウインドウが移動したりして描き直す必要が生じた時に発生します。このイベ ントに対する処理は必ず定義しなければなりません。(これがなければウインド ウは画面に見えません。)  x , y は描き直し領域の左上座標、h , v は描き直し領域の大きさです。ウイ ンドウサーバ内でクリッピングするので描き直し領域より大きく描画してもかま いません。 EventClose  クローズボックスが押された時と、ウインドウプログラムが終了しようとした 時、 KILL シグナルを受け取った時に発生します。 EventPop  タイトルバーでマウスをクリックした時に発生します。  (注意)デフォルトのイベント属性ではこのイベントは発生しません。 EventPush  プッシュボックスが押された時に発生します。  (注意)デフォルトのイベント属性ではこのイベントは発生しません。 EventMove  タイトルバーでマウスを移動させた時に発生します。  x, y にウインドウが移動するべき座標が設定されます。  (注意)デフォルトのイベント属性ではこのイベントは発生しません。 EventResize  リサイズボックスでマウスを移動させた時に発生します。  x , y はウインドウが移動するべき座標、h , v にウインドウ変更されるべき 大きさです。 EventIconify  アイコン化ボックスをクリックした時に発生します。 EventZoom  ズームボックスをクリックした時に発生します。  h , v はウインドウ変更されるべき大きさです。移動するべき位置は (0,0) です。 EventScroll  スクロールウインドウにおいてスクロールバーでマウスがクリックされた時に 発生します。  x , y は変更されるべきホーム位置です。  (注意)デフォルトのイベント属性ではこのイベントは発生しません。 EventMouseSwitch  マウスのスイッチを押した時、離した時、押したままマウスを移動した時に発 生します。  x , y はマウスのローカル座標、LeftStat, RightStat はそれぞれ左、右のボ タンの状態( ON の時 TRUE です。)LeftON, LeftOFF, RightON, RightOFF は それぞれボタンを押した時、離した時のみ TRUE になります。MoveFlag はマウ スを移動させた時のみ TRUE になります。  このイベントはマウスの位置にあるウインドウに対してのみ発生し、その他の ウインドウに対しては発生しません。また、ルートウインドウの直接の子ウイン ドウに対してのみ発生し、さらにその子ウインドウにはイベント処理関数内から WindowSendEvent 関数で送らなければなりません。イベント情報を送るべき子ウ インドウは WindowGetChild 関数でみつけることができます。  EventMouseMove EventMouseEnter EventMouseOut EventKey の各イベントにつ いても同じです。 EventMouseMove  マウスのボタンを押さずに移動させた時に発生します。  x , y はマウスのローカル座標です。  (注意)デフォルトのイベント属性ではこのイベントは発生しません。 EventMouseEnter  マウスがウインドウに入った時に発生します。 EventMouseOut  マウスがウインドウから出た時に発生します。 EventKey  キー入力があった時に発生します。  KeyCode は入力されたキーコード、ShiftStat はシフトキーの状態です。これ は IOCS コール $02 で与えられるものと同じです。 EventInterval  タイマーイベントです。他にイベントが発生しなかった時にすべてのウインド ウに対して発生します。  タイマーイベントは手前にあるウインドウから順に発生し、その途中で他のイ ベントが発生した時は中断されます。よって、奥のほうにあるウインドウではタ イマーイベントが発生する頻度は小さくなります。  (注意)デフォルトのイベント属性ではこのイベントは発生しません。 EventNon   ウインドウサーバ内部で使用。アプリケーションプログラムでは発生しません。 EventUser  クライアントが発生させるイベントで、クライアント間通信に使用します。   ComData , ComBuffer に必要なデータを設定して発生させます。  (注意)デフォルトのイベント属性ではこのイベントは発生しません。 EventGraphic  グラフィックモードが変更された時に発生します。x に変更後の画面モード が設定されています。  (注意)デフォルトのイベント属性ではこのイベントは発生しません。