Mauszeigerveränderung wird wieder zurückgesetzt
-
Hallo,
in einem MFC-Programm wird bei mir ein CRectTracker-Objekt m_tracker über ein Hintergrundbild gelegt. Das Objekt kann man per Maus bewegen und größer/kleiner ziehen, dabei wird der Mauszeiger entsprechend seiner Position (gibt mir HitTest(point) zurück) in der OnMouseMove verändert:
int m_iMouseOverRect = m_tracker.HitTest(point); switch (m_iMouseOverRect) { case 0: // oben links SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZENWSE)); break; case 1: // oben rechts SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZENESW)); break; case 2: // unten rechts SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZENWSE)); break; case 3: // unten links SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZENESW)); break; case 4: // oben mitte SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZENS)); break; case 5: // rechts mitte SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZEWE)); break; case 6: // unten mitte SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZENS)); break; case 7: // links mitte SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZEWE)); break; case 8: // innerhalb der Auswahl SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZEALL)); break; default: // Ausserhalb einer existierenden Auswahl SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); break; }Das klappt auch ganz gut.
Ich wollte aber gern, dass er den Cursor nur noch ändert, wenn sich am HitTest-Resultat etwas ändert - dann jedoch blinkt der neue Cursor nur kurz auf, ist dann aber durch den Standard-Cursor ersetzt und bleibt das natürlich dann bis wieder ein neuer Zustand erreicht wird.
Wenn ich das wie oben implementiere (also bei jeder Mausbewegung den Cursor festlege) dann klappt es zwar, man sieht jedoch auch dort bei jeder Bewegung kurz den normalen Mauszeiger aufblinken, bis er wieder durch den jeweils aktuellen ersetzt wird. Sehr unschön und sicher nicht so gewollt.In meinem Code kommt sonst nichts in Sachen Cursorsteuerung vor, ich habe alles durchsucht. Meine View-Klasse ist von CScrollView abgeleitet - gibt es dort eine Funktion die vielleicht "nebenbei" auch den Cursor verändert und mir so diese Probleme beschert? Ich konnte nichts dazu finden.
Vielen Dank für jeden Hinweis,
Martin
-
Hast du eine Lösung gefunden? Ich stehe nämlich vor dem gleichen Problem.
Gruß edmundy
-
Das ist "by design".
Guckt euch mal WM_SETCURSOR an.
-
hustbaer schrieb:
Das ist "by design".
Guckt euch mal WM_SETCURSOR an.Ich habe dann leider immer noch das Problem, dass meine Steuerelemente in dem Fenster den Systemcursor haben. Die Änderung des Cursors im Fenster an sich funktioniert einwandfrei.
Wenn ich die Änderung erzwingen will entsteht ein Flackern zwischen Systemcursor und neuem Cursor.Gruß edmundy
Edit: return TRUE bei OnSetCursor() vergessen..
