« 配置ツールのGUIを作る | メイン | 読み込みエラーの処理など »

2005年11月21日

Teaspire 開発日誌:: wxWidgetsで任意のイベントに応答する

    

スクロールや回転はメタセコイヤのように、ボタンを押しながらマウスを動かすスタイルにしようと思ったのだが、ボタンのイベントはクリックしかない。
EVT_LEFT_DOWNでイベントのハンドラを定義しても、ボタンの上では反応しない。
イベントテーブルでいろいろとやってみるが、どうやらイベントテーブルでは出来なさそうだ。
ソースを追ってみると、クリックにのみ反応するようになっている様子。
さて、どうしよう?

使用をやめることも検討したが、TreeViewなどのことを考えると、一からゴリゴリ書いていくのは辛い。
カスタムウィジェットか別ダイアログにして、そこの描画やイベントハンドラはすべて自分で処理するか。
別ダイアログにすると少し見栄えがなぁ。

カスタムウィジェットしかないかなと言う事で、wxWindowの説明を見てみる。
すると、PushEventHandlerと言うメソッドが!
これは、もしや独自のイベントハンドラを作って、ボタンに追加してやれば右ボタン押下イベントなどにも反応できるのでは?
さっそく、wxEvtHandlerを継承したクラスを作り、ProcessEventをオーバーライド。
wxEvent::GetEventTypeがwxEVT_LEFT_DOWNの時にtrueを返し、それ以外はfalseを返すように実装。
リソースを読み込んでフレームに設定した後、FindWindowByNameメソッドで特定のボタンを取得し、取得できたらPushEventHandlerで作ったハンドラを設定。
ビルドし実行してみると、wxEVT_LEFT_DOWNイベントを補足できた!
これでクリック以外のイベントにも応答出来そうだ。
後、PushEventHandlerをオーバーライドしなくても、wxEvtHandlerを継承したクラスにイベントテーブルを追加してやれば処理出来そうな気もする。
次はその辺りを調べよう。



投稿者 Takenori : 2005年11月21日 01:46




comments powered by Disqus
Total : Today : Yesterday : なかのひと