OnMouseMove, Wie erkennen in welche Richtung bewegt wird?



  • Hi an alle,

    ich versuche gerade über den MouseMove Event zu erkennen in welche Richtung die Maus bewegt wird nachdem ich die linke Maustaste geklickt habe.
    Wie genau kann ich das feststellen?

    Dies soll im Endeffekt dazu dienen das ich eine Steuerelement hin und herschieben kann wie ein SplitterWnd.

    Gruß



  • Speicher die Position zur Zeit des Mausclicks und vergleiche dann mit der aktuellen Position im MouseMove?



  • Du musst garnichts feststellen - setze einfach die Position des Elements an die Position des Mauszeigers. Dabei musst du natürlich die relative Position des Cursors innerhalb deines Elements kennen und entsprechend dazu dann alles verschieben, ansonsten springt das Element mit dem linken oberen Rand immer zur Maus ;). Das ist im Grund schon etwas trickreiche Geometrie bzw. die komplexe Anwendung von simplen mathematischen Regeln - stell dich am besten auf ein brutzelndes Hirn und einen Koffeinschock ein 🙄



  • @tha_specializt:

    Na aber die Steuerelemente müssen sich ja nicht nur in der Position sondern auch in der Größe ändern. Ich versuch das ganze mit MoveWindow aber da passiert nichts. Und die Richtung in die ich mit der Maus wandere ist schon wichtig, da hier 3 horz. Fenster existieren, die je nach Richtung entsprechend angepasst werden müssen.
    Mit welcher Methode kann man den hier am besten arbeiten?



  • Hier mal etwas Code wie ich momentan vorgegangen bin

    m_wndContactView.GetWindowRect(&crContact); //Steuerelement 1
    m_wndSubjectView.GetWindowRect(&crSubject); //Steuerelement 2
    ScreenToClient(&crContact);
    ScreenToClient(&crSubject);
    if(point.x > m_noldCursorPos ) //m_noldCursorPos = vorherige Position des Cursors
    {
    	nDiff = point.x - crContact.right;
    	......
    	//Mit MoveWindow
    	m_wndContactView.MoveWindow(crContact.left, crContact.top, crContact.Width() + nDiff, crContact.Height(), TRUE);
    	m_wndSubjectView.MoveWindow(crSubject.left + nDiff, crSubject.top, crSubject.Width() - nDiff, crSubject.Height(), TRUE);
    	.....
    	//Mit SetWindowPos wird nicht gleichzeitig ausgeführt:)
    	m_wndContactView.SetWindowPos(NULL, crContact.left, crContact.top, crContact.Width() + nDiff, crContact.Height(), SWP_NOZORDER);
    	m_wndSubjectView.SetWindowPos(NULL, crSubject.left + nDiff, crSubject.top, crSubject.Width() - nDiff, crContact.Height(), SWP_NOZORDER);
    
    	.....
    
    	Invalidate(FALSE); //Bereits mit TRUE probiert
    }
    

Anmelden zum Antworten