マウスホイールの回転量の取得

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
キ選

マウスホイールの回転量の取得

#1 投稿記事 by キ選 »

現在AB(4.24)にてゲームを作成中なのですが、マウスホイールの回転量の取得ができず困っています。

最初にDirectX(ABDX)のDirectInputでの取得を試してみましたが、コンパイルし実行すると「共有違反がおきました」みたいなメッセージが表示され、プログラムが終了してしまいます。

変数宣言部でCInputMouseとGetStateの引数になるDIMOUSESTATE構造体を宣言しています。
Dim DxMouse As *CInputMouse
Dim MStatus As *DIMOUSESTATE


初期化部分にてCInputMouseを生成しています。
DxMouse = New CInputMouse

InputActionProc()内で実際にマウスのデバイスから情報を取得します。
DxMouse -> GetState(MStatus)

終了部分にて開放
Delete DxMouse

ソースはこんな感じになっていますが、上記したエラーでプログラムが停止してしまいます。

また、次にDirectInputを諦めサブクラス化にとってWM_WHEELメッセージを拾ってみようと考えやってみました。
MSG構造体に返ってくる情報を取得し、なにかしら数値が返ってくるのですが増加量などの具体的な数値ではないらしく、ここらへんもいろいろ調べてみたのですが解りませんでした。

非常に手詰まりです。。。
最悪、回転が正方向か負方向かわかれば良いと考えています。
どなたか、お力添えお願いしますm(_ _)m
高信期

#2 投稿記事 by 高信期 »

サブクラス化し、WM_MOUSEWHEELメッセージを受け取ったときに、

コード: 全て選択


WheelDelta = HiWord(wParam) As Integer
If WheelDelta > 0 Then
  '正方向の処理
Else
  '負方向の処理
End If
と処理することが出来ます。
しかし、WheelDeltaの絶対値は120に固定されているそうなので、
回転数まではわからないようです。
キ選

#3 投稿記事 by キ選 »

ご回答ありがとうございます。

おおなるほど(*゚∀゚*)
処理的にはその方法も試したのですが、どうも負方向回転時にデカイ値が返ってくるので、符号無しっぽい気はしてたんですが、符号付きに変換する方法がわからず途中で投げてました('A`;)
そのビット数の型にキャストすることで符号付きにできるんですね。それもライブラリ見てみたらちゃんと書いてありました。
私の調べ不足でした。お手数かけてすみませんでした。それと、ありがとうございましたm(_ _)m
返信する