gegenteil von WM_MOUSEMOVE?



  • Hi!

    ja klingt doof, aber gibt es eine Message die mir sagt das sich der Courser NICHT, bewegt?

    habe nämlich folgendes Problem:

    case WM_MOUSEMOVE:
    					POINT ptCursor;
    					GetCursorPos( &ptCursor );
    					mousedata.Xi = (ptCursor.x-mousedata.X);
    					mousedata.Yi = (ptCursor.y-mousedata.Y);
    					mousedata.X = ptCursor.x;
    					mousedata.Y = ptCursor.y;	
    					(DX.d3ddev)->SetCursorPosition( ptCursor.x, ptCursor.y, 0 );
    				break;
    

    Hier wird in mousedata.Xi die relative bewegung gespeichert. wird die maus jetzt nicht mehr bewegt sollte die relative bewegung = 0 sein.
    da aber WM_Mousemove nur procct wenn die maus sich bewegt, wird zeile 5 und 6 ein entscheidendes mal NICHT aufgerufen, nämlich um beide werte auf 0 zu setzen, da ptCur-moused = 0 ist....

    jemand eine idee wie ich die relative bewegung berechnen kann ohne dieses Problem?


  • Mod

    Nein! Es gibt keine Maus-ruht Nachricht.
    Bau Dir einen Timer und frage die Mausposition mit GetMessagePos einfach ab.



  • ok, dann werd ich mir was überlegen.

    thx



  • Wann genau sollte diese Nachricht deiner Meinung nach geschickt werden?

    Wenn du uns sagst, was genau du tun willst, können wir dir auch eine Lösung vorschlagen 😉



  • ok

    eigentlich ganz simpel:
    wenn Maustaste gedrückt, dann addiere relative mausbewegung in x zu winkel1 und y zu winkel2. halt ein standard "klick-zieh -> umsehen im 3d raum"

    dazu muss ich irgendwoher relative bewegungen der maus herbekommen. und die müssen natürlich zwangsläufig 0 sein wenn die maus ruht. damit das bild sich nicht immer weiter dreht.

    und das hab ich wie oben gezeigt versucht



  • Merk dir einfach immer die letzte Mausposition?



  • hab ich auch schon drüber nachgedacht, hab nur gehofft es gibt einfach irgendwo relative coords zum auslesen^^


  • Mod

    Ich versteh nicht warum Du "relative" Positionen benötigst.

    Genügt nicht, beim Maus-Click die Startposition zu merken. Die Maus Capture zu setzen und dann einfach zu sehen, wo die Maus gegenüber dieser Startposition ist?

    Die Addition aller relativen Bewegungen müssen sich zu der Gesamtbewegung vom Ursprung ja addieren.



  • dann würde ich ja einen immer größer werdenden wert haben.
    ich hab jetzt einfach vor dem Msg handle die aktuelle position gespeichert und nach dem msg handle das von dem aktuellen abgezogen und in eine neue variable gepackt. funktioniert sehr gut


  • Mod

    Dann habe ich das Problem nicht verstanden, aber egal.
    Mit einem Timer kannst Du selber die Intervalle sehen und auch die Abstände selbst nach Gustao ermitteln.



  • Er will vermutlich eine Kamerasteuerung implementieren und braucht dabei bei jedem Mouse Move die Winkeländerung, um die er seine Kamera weiterdrehen soll 😉


  • Mod

    Wenn er über einen Timer, die Mausposition pollt, kann er das doch...



  • Aber wieso sollte er einen Timer verwenden wollen, wenn es doch viel einfacher und besser geht, indem man sich einfach immer die letzte Mausposition merkt!?


  • Mod

    Ich habe verstanden, dass er den Stillstand mitbekommen will. Dann benötigt er ein Delta in einem Zeitabschnitt...

    Aber egal. Der OP sollte genug Stoff zum Nachdenken haben.



  • Ah ok, jetzt ist mir klar was du meinst. Ich denk er hat sein Problem lösen können, auch wenn ich mir jetzt auch nimmer sicher bin, was eigentlich genau das Problem war 😉


Anmelden zum Antworten