はじめに
GUI環境で強力な効果を発揮するマウスジェスチャを、.NET環境で行ってみましょう。なお、Win 32版については別稿を参照してください。
対象読者
.NET FrameworkとC#での開発を行ったことがある方。
必要な環境
.NET Framework 1.1以上の環境。
設計
まずは構想を練らなければなりません。今回はサンプルなのでこちらで決めさせて頂きます。
- 右ボタンが押されたら始まり、離されたら終わる。
- 入力可能方向は4方向(斜め判定は無し)
- 同じ方向への連続入力は無し(普通はこうすると思います)
- ある方向に動かすと反対側の移動量は0になる
- 縦横の移動量を比較して多い方だけを考える(より自然な移動になる)
- ウィンドウの外に出てもしっかりと動作するようにする(これを行わないと変なことになる)
これだけですが、一応使用に耐えうる立派なマウスジェスチャ検出になります。
それと、今回は構造があまりすっきりとしていません。勘弁してください。
例えば斜め移動を行ったときに、これを行わないと2つの方向が交互に検出されてしまいます。それを防ぐためにユーザーがどちらへより動かしたかったのかを判定します。
マウスキャプチャ
32bit Windowsではマウスについてのイベントが厳しくなっています。
まず第一に、自分のウィンドウの上のマウスの動きしか知ることができません。.NETのアプリケーションでもそうなっているようです。そこで、「マウスのキャプチャ」を行います。マウスのキャプチャを行うと、自分だけにマウスの動きが教えられ続けます。
ただしこれにも制限があって、自分のウィンドウ内で押されたマウスが、押され続けている間だけ有効です。
これらの条件は厳しいですが、今回マウスジェスチャを行う上ではちょうど良いくらいの機能です。ちなみにキャプチャされた移動と、ボタンを放す動作は普通のイベントとして知ることができます。
ボタンや、フォームが継承しているControl
というクラスには、bool Capture
というプロパティがあります。このプロパティを操作することで、マウスキャプチャの有効/無効をコントロールできます。
//マウスをキャプチャ control_.Capture = true; //マウスのキャプチャを解除 control_.Capture = false;