1

このコードよりも正確にマウス座標を追跡する方法が必要です。このコードを実行して、マウスを非常に速く動かしたり、方向を速く変えたりすると、座標は 50 から 40 のようになります。たとえば、スキップする座標が 10 個あります。ゆっくり動かせば問題ない。スキップせずにすべてのポインター座標を追跡する方法が必要です。コード プロジェクトでグローバル フックを使用するサンプルを試しましたが、同じ結果が得られました。これどうやってするの?ウィンドウがすべての座標を追跡するように強制するレジストリの変更はありますか。出来ますか?私は C# でそれを行うことを好みますが、他の方法も検討します。ありがとう。

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (num != 1)
    {
        listBox1.Items.Add(e.X.ToString());

    }
}
4

3 に答える 3

3

マウスが A から B への旅にあるすべての座標をカバーしていると確信していますか?

OS からのマウス入力は、サンプリングされた目立たないデータです。これは、ご覧のとおり、マウス ポインターが座標をスキップできることを意味します。

高解像度が十分でない場合は、データの補間を検討してください。

IIRC、マウスのサンプルレートを上げることができます。方法は思い出せませんが。私はウェブができると確信しています。

于 2012-10-28T00:34:02.003 に答える
2

マウスポインタはすべてのピクセルを移動するわけではありません。マウスを速く動かすと、イベント間で大量のピクセルが移動します。ハードウェアは、マウスが移動するピクセルごとに信号を送信するのではなく、前回のレポート以降にマウスが移動した距離を報告します。

マウスの位置を追跡する代わりに、Cursor.Clipプロパティを使用してマウスの動きを制限します。

var rect = someControl.RectangleToScreen(new Rectangle(Point.Empty, someControl.ClientSize));
Cursor.Position = new Point(rect.Left + rect.Width / 2, rect.Top + rect.Height / 2);
Cursor.Clip = rect;

空の長方形を使用してマウスを離します。

Cursor.Clip = new Rectangle(0, 0, 0, 0);
于 2012-10-28T01:00:04.540 に答える
0

私は何年にもわたってこれを数回尋ねられました。通常、マウスイベントリスナーに、マウスが通過するすべてのピクセルを通知するように指示することはできません。マウスを十分に速く動かしている場合、OSでさえ画面の広い領域をスキップする可能性があります。唯一の信頼できる方法は、与えられたマウス位置の履歴から自分でポイントをプロットすることです。簡単な方法は、現在のポイントと最後のポイントの間に線を引くことです。より複雑なソリューションでは、最後のいくつかの座標を保存し、正弦/接線の計算を使用して滑らかな曲線をプロットします。

于 2012-10-28T00:53:24.400 に答える