Microsoft Natural Wireless Laser Mouse 6000、買いました。ただし、残念ながら買ったのは私ではありません。学校の同好会です。
人間工学に基づいたという一風変わった形のこのマウス、実際に触ってみると、ますます自分用に欲しくなりました。手で包み込むように持つこの感じがたまりません。パッケージの透明のプラスチックの型でさえ、いつでも握っていたくなります。ただ、デフォルトで今までのマウスより軽くなっている(少しのマウスの動きで、より多くマウスカーソルが動く)のに慣れるまで多少掛かりました。また、中(ホイール)クリックがもう少し軽いほうがいいなと思いました。
次はMicrosoft Natural Ergonomic Keyboard 4000を狙っています。こっちは、自分で買います、絶対。コーディングはキーボードを多用する作業なので、安物なんて使っていられません(今はDell付属のキーボードですが)。
さて、このマウスには5つボタンがあります。5つボタンマウスは初めてなので、記念に左右以外のボタンクリックを検出するプログラムなんて書いてみました。ノーマルウィンドウのプロジェクトを作って、ちょっとウィンドウプロシージャをいじっただけですが。
Sub Clicked(which As String)
Dim msg = which + "ボタンがクリックされました"
MessageBox(hMainWnd, ToTCStr(msg), "", MB_OK)
End Sub
Function MainWndProc(hwnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT
MainWndProc = 0
Select Case dwMsg
Case WM_MBUTTONUP
Clicked("中")
Exit Function
Case WM_XBUTTONUP
If HIWORD(wParam) = XBUTTON1 Then
Clicked("X1")
ElseIf HIWORD(wParam) = XBUTTON2 Then
Clicked("X2")
End If
Exit Function
End Select
MainWndProc = EventCall_MainWnd(hwnd, dwMsg, wParam, lParam)
End Function
4つ目 (X1)、5つ目 (X2)のマウスボタンが押されたときには、WM_XBUTTONDOWNが発生します。そして離されたときにWM_XBUTTONUPが呼ばれます。また例によってWM_XBUTTONDBLCLKもあります。左、右、中(ホイール)のボタンのメッセージは、L、R、Mと独立していましたが、X1とX2はこのように1つのメッセージを共有しています。2つの区別は、wParamの上位ワードをみて区別するようになっています。これ以上マウスボタンが増えても、もう独立したメッセージは与えず、WM_XBUTTON系を使いまわすのでしょう。これ以上ボタンがあっても、人間の手(あるいは指)が追いつかないと思いますが。
これらWM_XBUTTONUPやXBUTTON1, 2などの定数は、AB5では宣言されています。AB3/4でも、これらの宣言を持っていけば、上のプログラムは動くはずです。しかし、わざわざ試す人などいないでしょうからここに宣言は載せません。AB3/4でやりたければ、自分でAB5かどこかから宣言を持っていってください。
このマウスでは、左ボタンの更に左に追加の2つのボタンが配置されていますが、手前側のボタンがX1で、奥のボタンがX2でした。予想では逆だと思っていましたが、そもそもどっちがX1でどっちがX2かなんて結構どうでもいい話のような気がします。
スポンサード リンク |