CodeZine(コードジン)

特集ページ一覧

マウスジェスチャを実装する(.NET版)

マウスジェスチャによる機能の迅速な呼び出し

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2006/05/15 11:30

Webブラウザなどに実装されているマウスジェスチャ。GUI環境で強力な効果を発揮するマウスジェスチャを.Netで実装する方法を解説します。

目次
完成画像
完成画像

はじめに

 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;

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2006/08/21 15:16 関係のないコードが混じっていたので削除。

あなたにオススメ

著者プロフィール

  • 利都(りと)

    陸奥でプログラムをしている学生。 LOGOからVB6.0へ。 現在は主にC系言語を利用。 Atelier BlueにてManaged DirectXについてのTipsを書いている。 http://www.atelier-blue.com/ IL(CIL,MSIL)もしているのでそちらに興味...

バックナンバー

連載:マウスジェスチャを実装する
All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5