最終更新日 2007年06月23日 up top

VB.NETでのマウスジェスチャの実装

VB.NETでのマウスジェスチャの実装 1.1の方がお勧めです。

Public Class Form1 Dim mg_enable As Boolean '// マウスジェスチャ中かのフラグ Dim mg_x, mg_y, mg_dist As Integer '// 元のマウスのX、Y座標保持用と、移動距離の閾値用 Dim mg_direction As String '// ジェスチャの結果 '// マウスのボタンが押された Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown If e.Button = Windows.Forms.MouseButtons.Right Then '// 右ボタンなら mg_enable = True '// マウスジェスチャ開始!(開始!) mg_direction = "" '// 結果保持用の変数初期化 mg_dist = 20 '// 20ドット動いたら1コマンドとして認識 mg_x = e.X '// 右ボタンを押したときのマウス座標を保持 mg_y = e.Y '// 右ボタンを押したときのマウス座標を保持 End If End Sub '// マウスのボタンが離された Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp If e.Button = Windows.Forms.MouseButtons.Right Then '// 右ボタンなら mg_enable = False '// マウスジェスチャ停止 Select Case mg_direction '// mg_direction を見てここでジェスチャ実行 Case "↓→" '// 終了とか End Case "→↑" '// ウィンドウの最大化、元に戻すとか If Me.WindowState = FormWindowState.Normal Then Me.WindowState = FormWindowState.Maximized Else Me.WindowState = FormWindowState.Normal End If End Select End If End Sub '// マウス移動中 Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove '// マウスジェスチャ中なら If mg_enable Then '// 右クリックを押した座標からのX軸かY軸の移動距離の閾値を越えたなら If Math.Abs(mg_x - e.X) > mg_dist Or Math.Abs(mg_y - e.Y) > mg_dist Then '// X軸とY軸のどっちの移動距離が大きいかで方向を判断 If Math.Abs(mg_x - e.X) > Math.Abs(mg_y - e.Y) Then '// 左方向なら If mg_x > e.X Then '// 新たに現在の座標を設定する mg_x = e.X '// もし最後のジェスチャと違うなら、ジェスチャを追加する If Microsoft.VisualBasic.Right(mg_direction, 1) <> "←" Then mg_direction = mg_direction & "←" End If Else mg_x = e.X If Microsoft.VisualBasic.Right(mg_direction, 1) <> "→" Then mg_direction = mg_direction & "→" End If End If Else If mg_y > e.Y Then mg_y = e.Y If Microsoft.VisualBasic.Right(mg_direction, 1) <> "↑" Then mg_direction = mg_direction & "↑" End If Else mg_y = e.Y If Microsoft.VisualBasic.Right(mg_direction, 1) <> "↓" Then mg_direction = mg_direction & "↓" End If End If End If End If End If End Sub End Class