Mauscursor positionieren
-
Hallo Forum,
ich möchte gerne den Mauscursor an der aktuellen Position festhalten, sobald eine Maustaste gedrückt bleibt.
Durch eine Bewegung auf der x-Achse soll sich dann ein Wert ändern (das klappt auch schon). Nur da sich der Mauscursor noch auf dem Bildschirm mitbewegt, ist der Wertebereich sehr eingeschränkt.Ich habs mit folgendem Code versucht:
TMouse *m = new TMouse; m->CursorPos.x = 0; m->CursorPos.y = 0;Danke für eure Hilfe.
Gruß bais
-
Allgemein: Es steht bereits ein globales Mouse-Objekt zur Verfügung, du brauchst also keine eigene Instanz zu erzeugen, und solltest das auch nicht.
Zum eigentlichen Problem: Was spricht dagegen, den User beim Erreichen des Bildschirmrandes absetzen und "nachfassen" zu lassen?
-
Mit dem globalen Mouse-Objekt kann ich zwar meine Position auslesen, aber irgendwie nicht verändern.
Es handelt sich um ein OpenGL-Fenster, wo der User um das Objekt herum rotieren kann. Es ist etwas lästig, nach einer halben Drehung wieder abzusetzten

-
bais schrieb:
Mit dem globalen Mouse-Objekt kann ich zwar meine Position auslesen, aber irgendwie nicht verändern.
Selbstverständlich lässt sich darüber die Mausposition auchsetzen.
TPoint pt; pt = Mouse->CursorPos; // alte Pos speichern ... Mause bewegen ... Mouse->CursorPos = pt; // an alte Pos zurücksetzenEs ist etwas lästig, nach einer halben Drehung wieder abzusetzten
Aber wohl Stand der Technik für Fensteranwendungen, soweit ich das beurteilen kann.
http://www.cobweb.net/~dplakosh/
Für längere bzw. konstante Rotation benutzt man halt die Tastatur. Und natürlich kannst du auch einfach mehr Grad Rotation pro Pixel Mausbewegung implementieren.Obwohl eher unwahrscheinlich hilft dir ja vielleicht ein MouseHook weiter (siehe FAQ). Ansonsten brauchst du wohl direkten Hardwarezugriff um auf die Maus-Interrupts zu reagieren, d.h. einen eigenen Treiber, oder evtl. DirectX?
Nachtrag:
Da fällt mir grad ein, man kann ja auch einfach beim Erreichen eines Bildschirmrandes die Maus wieder in der Mitte postitionieren, man muss dann ggf. halt die Wegstrecken weiteraddieren.
Wenn man dazu noch im MouseDown den Cursor ausblendet (crNone) dann sollte das eigentlich doch eine recht effektive Steuerung mit quasi unendlichen Wegen ermöglichen. Im MouseUp wird die Maus an die ursprüngliche Position zurückgesetzt und der Cursor wieder einblendet (crDefault).
-
Mit TPoint klappt es wunderbar, danke.
Ich hatte versucht, die Werte einzeln zu setzen, da ich die Positionen auch einzeln gespeichert hatte. Also über Mouse->CursorPos.x = oldx. Damit ging es leider nicht.Edit: Sehr interessante Komponente
