では、基本的なイベント処理はユーザに任せることにして、イベントからダブルクリックとか、ドラッグとかの情報を生成する機能を付加しよう。マウス、キー入力のイベントが、どういう使われ方をするかをもう少し検討してから...。
と思った。以下、処理するであろうイベントの処理内容を書き出したもの。
- ボタン
- ボタン上で左クリックされ、かつ同じボタン上でクリックが離された時のみ押されたと判断することにする。つまり、ドラッグ情報を利用する。
- ポップアップによる説明
- カーソルがそのラベル等の範囲内にあるかで、表示するかを判断する。カーソル位置が分かればよい。
- テキストボックス
- 表示可能文字についてのみ処理対象とする。フォーカス管理が必要かも。テキストボックスが存在しない、または無効な状態では、キー入力をため込む必要はなさそう。テキストボックスへの入力が切り替わった段階で、それまでの入力を無効にするのでもよさそう。または、テキストボックスへの表示内容はユーザプログラムが管理することにすれば、それでもよさげ。
- 終了イベント
- Ctrl-Q または Alt-F4 を終了イベントとみなす。
- 画面最大化トグルイベント
- Alt-Return が押されたのを検出する。このイベントが生じたときに、システムに最大化を許可するかをメソッドで設定できた方が、自然かも。
- ホイールによるスクロール、など
- ホイールの移動量を返す。イベント処理の時間が十分に短いとすれば、移動量がプラスか、マイナスか、だけを管理するのでもよさそう。それがいやなら、ユーザプログラムで処理しましょう、しましょう、ということで。
- クリックされたイベント
- コンボボックスの内容を開くときなどで使う予定。押された瞬間のイベント。
- クリック離されたイベント
- マウスのクリックが離された瞬間のイベント。ドラッグイベントで代用が可能かも
- ダブルクリック
- ユーザに提供する。というか、ユーザが自分で生成すればいいので、システム側で実装を提供する必要はないかも。
- キー入力履歴
- 過去のキー入力タイミング履歴をユーザに提供する。これも、ユーザのプログラム側で処理すればよい。
- キーが押されているか
- キーが押下状態か、どうかを返す。ユーザがイベントから生成すればいいか。
まとめると、システム側が生成して各 GUI コンポーネントに渡すべきイベントは、
- クリック情報(左右)
- ドラッグ情報
- カーソル位置
- ホイールの移動量 くらいらしい。書き出してみると、結構簡単かと。
それ以外の「ダブルクリック」などの情報は、ユーザライブラリ側で処理するような補助クラスを提供すればよさげ。そんな感じかな?
「AI 育成型の RTS 開発日記 (執筆中) に戻る」