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.. 😞


Anmelden zum Antworten