Problem mit Unterschied zwischen OnMouseMove und OnLButtonUp



  • Hallo alle zusammen, ich hab ein kleines problem:

    In Meinem Programm soll ein Auswahlrahmen gezeichnet werden. die Ecken sollen durch Anklicken markiert werden.(1x klicken Rahmen aufziehen ,2. Mal klicken rahmen verschwindet wieder. Markierter bereich verändert sich)Bis zu "Rahmen verschwindet" klappt noch alles allerdings wird der Bereich nur neu gezeichnet, wenn ich die Maus dananch noch bewege. wenn ich nur klicke wird nix verändert.

    Wie ihr an dem folgenden Quellcode sehen könnt, machen beide Methoden (fast) das Gleiche. Unter anderem rufen sie auch beide den Redraw befehl auf, der dann die draw methode ruft und das Update der zeichnung auslöst. nach diesem Punkt unterscheidet sich der Ablauf bei beiden Fällen nicht mehr. Es gibt nur eine Draw methode und bei Fallunterscheidungen werden beide Fälle gleich ausgewertet.

    Allerdings gipfelt dei MouseMove Methode in einem Redraw und der Mouseklick nicht.

    void CImagingDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    	CDialog::OnMouseMove(nFlags, point);
    	// TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen
    
    	mouseMove = point;
    	repaint = TRUE;
    	CDialog::RedrawWindow();
    	repaint = TRUE;
    }
    
    void CImagingDlg::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    	CDialog::OnLButtonUp(nFlags, point);
    	// TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen
    
    	mouseClick= point;
    	repaint = TRUE;
    	CDialog::RedrawWindow();
    	repaint = TRUE;
    }
    

    Hat irgendjemand eine Idee? Bin leider momentan etwas Hilflos weil mein VC++ unt er dem hier
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-180949-and-highlight-is-.html
    beschriebenen Fehler leidet und somit keine große Hilfe ist.

    S.



  • hm rufe doch mal anstatt deiner redraw-Methode einfach

    Invalidate();
    

    auf.



  • ach ja nochwas,

    du hast da die "Maustaste-Loslassen-Nachricht" aBgefangen, nicht das Herunterdrücken, das ist gewollt?



  • Hallo Pellaeon,

    Danke für den Tip.
    Leider bleibt das Problem auch mit

    Invalidate();
    

    bestehen.

    Ich weis leider nicht warum hier die LButtonUp Methodeverwendet wird. Dieser Teil des Programms wurde von meinem Vorgänger geschreiben und bis jetzt gab es keine Probleme in diesem Bereich. er wird schon seinen Grund gehabt haben.

    PS: Ein lustiger Zufall ist es übrigens, dass ich gerade im Moment die drei Bücher lese aus denen dein Nickname stammen dürfte. 🙂

    S.



  • Hm und das Zeichnen stimmt auch wirklich? Nicht das da ein Fehler ist?
    du kanst noch ein UpdateWindow(); direkt nach dem Invalidate(); testen.
    Aber dann müsste das neuzeichnen schon kommen.



  • Hallo nochmal,

    Also mit dem UpdateWindow ändert sich auch nix.
    Ich muss wohl doch noch nirgendwo einen kleinen Fehler übersehen haben.

    Wenn ich in der OnMouseMovemethode die die Redraw() Invalidate und UpdateWindow Anweisungen komplett rausnehme wird das Fenster trotzdem nicht sofort sondern erst nach einem Mausklick neu gezeichnet. was aber nicht passieren dürfet weil die OnMouseMove Methode nix mehr macht. Das heist alles passiert eigentlich eine Maus"aktion" zu spät. Vieleicht ist das ja noch ein ansatzpunkt .

    trotzdem Danke

    S.


Anmelden zum Antworten