Previous: ウィンドウのプログラムは喫茶店のスタイル
Up: イベント処理
Next: イベントの情報を受け取るには
Previous Page: ウィンドウのプログラムは喫茶店のスタイル
Next Page: イベントの情報を受け取るには

ウィンドウごとにイベントを登録

プログラムの中で処理したいイベントは、 その種類をウィンドウごとに登録します。 そのための関数が XSelectInput() です。 (厳密に言えばイベントは入力操作以外の原因でも発生しますが、 最も重要なのはマウスやキーボードからの入力イベントです。) この手順が存在する理由も、 サーバーとクライアント間の通信量をなるべく少なくしたいからです。 (人気のあるレストランでは、あらかじめ予約をしておかないと 店に入れないと考えてください。)
ハードウェアを管理するのはサーバーの役目ですから、 最初に入力信号を受け取るのもサーバーです。 サーバーはその中からクライアントが必要とする信号だけを 「ふるい」にかけて取り出します。 (不必要なものは無視され クライアントにいちいち送られるようなことはなくなります。) この「ふるい」に当たるものが、 XSelectInput()の3番目の引数に設定される 「イベントマスク」と呼ばれるデータです。 イベントマスクは単純な整数ですが、 その各ビットが特定のイベントに対する登録を行うかを表します。 イベントマスクのデータは1ビットごとに操作が必要ですから、 そのまま生の数値で書くとプログラムが理解しにくくなります。 (エラーの原因にもなりやすい。) そこで Xlibでは、あらかじめ用意されたマクロ定義を用いて イベントマスクの設定を行います。 複数のイベントを受け付けたいときには、|マーク(ビットの和)でつなぎます。

使用例)マウスのボタンのクリックとマウスの移動のイベントを受け取る

XSelectInput( dsp, win, ButtonPressMask | MotionNotify1Mask );

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