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