最終更新日 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