SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

マウスジェスチャを実装する

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

完成画像
完成画像

はじめに

 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;

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
インターフェイスとデータ構造

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
マウスジェスチャを実装する連載記事一覧
この記事の著者

利都(りと)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/382 2006/08/21 15:52

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング