タイトル | : Re^3: マウスを早く動かした場合にイベントが発生しない |
記事No | : 10772 |
投稿日 | : 2012/04/04(Wed) 16:42 |
投稿者 | : 魔界の仮面弁士 |
> 以下のイベントが発生しない状態です。
座標データは、必ずしも連続した点を指し示すわけではありません。
たとえば、 Private Sub PictureBox1_MouseMove(ByVal sender As Object, _ ByVal e As MouseEventArgs) Handles PictureBox1.MouseMove ListBox1.Items.Insert(0, e.Location.ToString()) End Sub のようなコードを実行してみると分かりますが、素早く動かすと、 途中の座標が通知されていないことがわかります。
途中の座標が抜け落ちる可能性がある以上、たとえば 移動前と移動後の座標を調べるようにして、その二点間に 含まれるラベルを着色することで対応されては如何でしょう。
> ゆっくり動かしていくとイベントをとれますが マウスを一定距離移動させたとしても、別PCで実施すると カーソル移動距離が異なってしまう事がありますよね。
マウスを同じ距離を動かしたとしても、実際のカーソル移動距離は (1) コントロールパネルのマウス速度設定(MouseSensitivity および MouseSpeed) (2) マウスの分解能(解像度)… DPI (Dots Per Inch) とか CPI (Counts Per Inch) とか (3) マウスのスキャン速度(サンプリングレート) などに左右されるためです。(数字が大きいほど大きく移動)
その上、OS 側のメッセージ通知処理の発生頻度も関係してくるため、たとえ 高級マウスであっても、MouseMove ではどうしても座標の抜けが発生します。
一応、DirectInput という技術を使うことで通知頻度を向上させることは できるかと思いますが、やはり取りこぼしを防げるわけではありません。 (なお DirectInput で取得できる値は、画面座標では無く相対移動距離です)
|