CRectTracker fuktioniert nicht



  • Hallo!

    Ich hab folgendes Problem, ich benutze CScrollVew für mein Programm,
    in OnLButtonDawn steht folgende code:

    CPoint result=GetScrollPosition();
    
        point.x+=result.x;
        point.y+=result.y;
        int anzahl=pDoc->list->GetCount();
        POSITION pos;
        for (int i=0;i<anzahl;i++)
        {
            pos=pDoc->list->FindIndex(i);
            Note *object=(Note *)pDoc->list->GetAt(pos);
            if(object->m_tracker.m_rect.PtInRect(point))
            {
                CRect rectTrue;
                object->m_tracker.GetTrueRect(&rectTrue);
                object->m_tracker.m_nStyle ^= CRectTracker::resizeInside;
                pDoc->SetModifiedFlag();
                pDoc->UpdateAllViews(NULL, (LPARAM)(LPCRECT)rectTrue);
                pDoc->UpdateAllViews(NULL);
            }
            else
                {
                    object->m_tracker.m_nStyle &= ~CRectTracker::resizeInside;
                    object->m_tracker.m_nStyle &= ~CRectTracker::hatchedBorder;
                }
            CPoint punkt;
    
            if(object->m_tracker.Track(this, point, FALSE,NULL))//an diese Stelle passiert es,es funz nicht
                {
    
            // normal tracking action, when tracker is "hit"
                    pDoc->SetModifiedFlag();
                    pDoc->UpdateAllViews(NULL, (LPARAM)(LPCRECT)pDoc->note->m_tracker.m_rect);
                    pDoc->UpdateAllViews(NULL);
                                }
        }
    

    es sollte eigentlich so funktionieren,wenn man an die Ecke mit Maus greift,kann rect vergrößern bzw verschieben werden, es funktioniert ja auch,ABER wenn man da ein bießchen scrollt, kriegt man kein point in Rect (oder es sieht so aus),was mache ich falsch,ich übergebe doch aktuelle Koordinaten an Maus mit :
    CPoint result=GetScrollPosition();
    point.x+=result.x;
    point.y+=result.y;

    ich bin am verzweifeln...

    Hat jemand schon was mit CrectTraker gemacht?
    Bitte, bitte helfen Sie mir...



  • Kann ja auch so nicht funzen. Und zwar captured CRectTracker in der Track-Methode Deine Mausbewegungen! Die Mauskoordinaten stehen dort relativ zur oberen linken Ecke des Views! D.h. CRectTracker bekommt die Scroll-Koordinaten nicht mit!

    Es ist also sinnlos, ein CRectTracker-Objekt innerhalb Deiner 'Notes' zu deklarieren. Es reicht, ein Rechteck zu deklarieren, in welchem die Dokument-Koordinaten stehen. Danach definierst Du Funktionen innerhalb des Views, z.B. ClientToDoc und DocToClient, welche die Document-Koordinaten in Abhängigkeit der Scroll-Position in Client-Koordinaten umrechnen. Das CRectTracker-Objekt kannst Du innerhalb von OnMouseDown lokal anlegen, übergibst ihm das berechnete Client-Rechteck und rufst dann Track auf.

    Komplizierter wird es, wenn Du während des Bewegens des Objekts auch noch scrollen willst!


Log in to reply