2012-03-16 4 views
3

私はコードを書く方法を理解しようとしているので、マウスの動きと線の描画との間の応答時間は瞬間です。毎回私はこれを行うたびに、常に2の間に遅れがあります。私はこれをWindowsフォームでコーディングしましたが、今はWPFでコーディングしています。マウスの動きに即座に反応する線画?

問題は明らかにコードにあり、私のコンピュータではありません。

基本的にはこのように動作します。 任意の場所をクリックすると、point1が作成されます。 マウスを動かすと、point2が更新され、マウスの動きに応じて変化するPoint1からPoint2に線が引かれます。以下

はこれを行うには、私のめちゃめちゃ簡単なコード..です それは一瞬見えるかもしれませんが、あなたはウィンドウを最大化し、ラインが長く作るとすぐにマウスを移動した場合、あなたはより簡単にそれに気づくことができます。..

も将来的にはこれの下に画像レイヤーがあり、確実にそれはもっと遅れを生ずるでしょう。しかし今、私はこれを最適化したいと思います。私は5年以上前から、他のそのようなプログラムを使用

は、ラインの動きは、実際の瞬間でした。私はこの新しいコーディング、そのラグ...

Point mLoc; 
    Line myLine = new Line(); 


    public MainWindow() 
    { 
     InitializeComponent(); 
     SnapsToDevicePixels = false; 

     myLine.Stroke = System.Windows.Media.Brushes.White; 
     myLine.StrokeThickness = 1; 

     canvas1.Children.Add(myLine); 
    } 

    private void onMMove(object sender, MouseEventArgs e) 
    { 
     mLoc = Mouse.GetPosition(canvas1); 

     myLine.X2 = mLoc.X; 
     myLine.Y2 = mLoc.Y; 


    } 

    private void onMLClick(object sender, MouseButtonEventArgs e) 
    { 
     mLoc = Mouse.GetPosition(canvas1); 

     myLine.X1 = mLoc.X; 
     myLine.Y1 = mLoc.Y; 

    } 
+0

キャンバスにラインコントロールを追加する狂気です。グラフィックスコンテキストを使用して画面に描画してみてください。 – Asti

+1

私のマシンであなたの正確なコードを試しましたが、遅れをまったく観察することはできません。 –

+0

humm、コメントありがとうございます..私はグラフィックスコンテキストを使用しようとします..遅れは非常に小さいが、確かにそこに..プログラムを最大化し、行を長くし、マウスを速く動かす –

答えて

2

でWinAPIのは、マウスのすべての動きを検出するのに十分迅速にWM_MOUSEMOVEを送信しない理由として混乱していThatsなぜ。マウスの動きは非常に正確に検出する方法を示して非常に良い記事(http://blogs.msdn.com/b/oldnewthing/archive/2012/03/14/10282406.aspx

+0

ありがとうございますC++でのみこれを行うことができますか?この記事ではC++について説明しています。これは本当ですが、私はちょうどC++やC#WPFの学習を続けることができるので、確かに知りたいです。 –

+0

いいえ、私はあなたがC#とwpfでそれをすることができると思います。 WinApi(p/invokeのhttp://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspxを参照)を使用して、フックするためにいくつかのトリックを使用する必要があるため、かなり難しいでしょう。ウィンドウのメッセージループ(この記事はヘルプ - http://stackoverflow.com/questions/624367/how-to-handle-wndproc-messages-in-wpf) – Nikolay

関連する問題