16

私の問題

さて、これに対する基本的な答えは、次のものを使用することです。

Cursor.Clip = new Rectangle(x1, y1, x2, y2);

しかし、私の問題はもう少し複雑です。

私がする必要があるのは、タッチ入力がそのウィンドウに制限されるように、特定のウィンドウの境界に正しくマップすることですが、ウィンドウに適切にクリップして、左上隅または右下に触れたときにタッチ スクリーンの隅に移動すると、ウィンドウの左上または右下にカーソルが配置されます。を使用Cursor.Clipしてもそれは行われず、そのクリッピングゾーンの外側でタッチスクリーンに触れるすべてのものは、タッチしている場所から最も近いウィンドウの端にマップされます。

境界を正しく調整できるように、マウスの位置を事前にフィルター処理できるものはありますか?

他のすべてが失敗した場合

別の方法として、マウス フィードをTUIO入力に変換し、その方法でアプリケーションにフィードするコードを見つけようとすることもできますが、そうする必要がないことを望んでいました。したがって、私がそれを行う方法を誰かが知っていれば、元の要求が不可能な場合に役立ちます。

私が何をしているかを正確に知りたい人のために

私がこれを行っている理由を正確に知る必要がある場合は、基本的に、ビデオでフィードされているタッチスクリーンから、(通常のマウスイベントまたは TUIO を介して) 描画するタッチ入力を受け取ることができる 3D アプリケーションにマウスイベントをフィードしようとしています。ただし、出力に設定されているサイズのみをレンダリングするため、画面のフル解像度に最大化する方法はありません。

明確にする

  • 通常のマウスがこれによって中断されてもかまいません。
  • デフォルトの Windows 7 Touch を使用する Windows 7 システムについて話している
  • 入力は、シリアルなどではなく、USB経由で行われます。
4

2 に答える 2

1

Reactive Extensions を使用して、タッチ イベントをクリップできます。

var movingEvents = 
      Observable.FromEventPattern<MouseEventHandler, MouseEventArgs>(
        h => this.MouseMove += h, h => this.MouseMove -= h)
          .Select(x => x.EventArgs.Location)
          .Where(location =>
               location.X >= viewPort.Location.X 
                  && location.X <= viewPort.Location.X + viewPort.Width
                  && location.Y >= viewPort.Location.Y 
                  && location.Y <= viewPort.Location.Y + viewPort.Height);

movingEvents.Subscribe(update);

public void update(Point p)
{
    textBox1.Text = p.ToString();
}

http://www.codeproject.com/Articles/52308/The-Rx-Framework-By-Example

于 2013-04-17T10:14:41.457 に答える
0

Windows 8 より前のタッチ スクリーンは通常、できる限りマウスになりすまそうとするため、低レベルのマウス フックをインストールするとうまくいく場合があります。

たとえば、http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-Cを参照してください。

于 2013-09-02T20:54:22.277 に答える