Rechtecke und Kreise im View verschieben und es will einfach nicht =(
-
Nabend allerseits,
so richtig will er mir keine Elemente verschieben und ich weiß nicht wo ich suchen soll, denn er bringt ja keine fehler oder warnungen. Hat einer ne Idee wo ich das suchen kann bzw sollte? Bin über jeden Tip dankbar.
greetz
Tobivoid CMy07AufgabeView::OnLButtonDown(UINT nFlags, CPoint point) { CMy07AufgabeDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CMyDrawObject *pDrawObject; // set default TRUE BOOL create_new=TRUE; if((m_nDefType!=DRW_RECT)&&(m_nDefType!=DRW_CIRCLE)){ m_nDefType=DRW_RECT; } // check if hit an object if( ! pDoc->DrawObjectList.IsEmpty( )) { // list contains draw objects POSITION pos = pDoc->DrawObjectList.GetTailPosition(); while( pos != NULL ) { // search for a hit pDrawObject=pDoc->DrawObjectList.GetAt(pos); if( pDrawObject->IsHit(point) ) { // hit an object SetCapture(); // set new cursor SetCursor( LoadCursor(NULL,IDC_SIZEALL) ); // place on top pDoc->DrawObjectList.RemoveAt(pos); create_new = FALSE; break; // .. and insert again } else // seek next; top down pDoc->DrawObjectList.GetPrev(pos); }//while( pos != NULL ) }//if( ! pDoc->DrawObjectList.IsEmpty( )) if( create_new ) { switch( m_nDefType ) { case DRW_RECT: pDrawObject= new CMyRectObject(); break; case DRW_CIRCLE: pDrawObject= new CMyCircleObject(); break; } pDrawObject->Pos= CRect(point, point); pDrawObject->Pos.InflateRect(20,20); } // add to list tail pDoc->DrawObjectList.AddTail( pDrawObject ); Invalidate(); CView::OnLButtonDown(nFlags, point); }void CMy07AufgabeView::OnMouseMove(UINT nFlags, CPoint point) { if( GetCapture() == this ) { // move an object CMy07AufgabeDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); POSITION pos = pDoc->DrawObjectList.GetTailPosition(); if( pos != NULL ) { // get topmost object CMyDrawObject *pDrawObject = pDoc->DrawObjectList.GetAt(pos); // remember previous position CRect OldPos( pDrawObject->GetPos() ); // move it pDrawObject->SetPos( point ); // redraw only changed area CRect RedrawRect; RedrawRect.UnionRect( OldPos, pDrawObject->GetPos() ); // redraw changed area of the view RedrawWindow( RedrawRect ); } // if( pos != NULL ) } // if( GetCapture() == this ) CView::OnMouseMove(nFlags, point); }void CMy07AufgabeView::OnLButtonUp(UINT nFlags, CPoint point) { if( GetCapture() == this ) { ReleaseCapture(); } CView::OnLButtonUp(nFlags, point); }
-
ich hab zwar kein tipp, aber ich bin grade am selben problem am arbeiten, bzw. noch dabei es zu erstellen.
Wofür ist das Programm, wenn man fragen darf?
-
Das Programm ist nur zum Test, die eigentliche Aufgabe bestand nur darin elemente darzustellen.
Aber ich habe noch vor:
- elemente verschiebbar zu machen
- Font einzubingen (skalier- und verschiebbar)
- das gleiche für kleine bilder/ornamenterauskommen soll ein kleiner editor zu präsentationszwecken.
Alle diese Elemente/Bilder werden dann über einem Bild angeordnet und gelockt.
Danach wird das Bild gesaved. Neben dem Bild ist dann noch ein 2ter View in dem
man lustig Text hacken kann und wenn man das ganze drucken will is das verwurschtelte bild links und der text rechts auf dem Ausdruck.
So die Planung.
gruß
Tobi
-
du speicherst nicht zufällig die koordinaten von den elementen in eine datei, oder speicherst du einfach das fertige bild?
-
in der Aufgabe selbst werden die elemente in einerm file hinterlegt so das dies auch wieder rekontruierbar ist, aber für dieses Präsiproject ist das nicht nötig bzw nicht vorgesehen. da soll nur ein bild hinten rauskommen und evtl noch gedruckt werden.
-
sowas änlches wie bei wir (mein Thread: http://www.c-plusplus.net/forum/viewtopic-var-t-is-146144.html), nur das du wesentlich weiter bist.
-
public: //Default Constructor und Destructor virtual ~CMyDrawObject(); CMyDrawObject(){}; CRect Pos; int Type; virtual void Serialize(CArchive& ar) { if (ar.IsStoring()) ar << Pos; else ar >> Pos; }; virtual BOOL IsHit(CPoint &point){ return FALSE;}; virtual void Draw(CDC* pDC){}; // CRect& damit der Rückgabewert halt CRect spezifisch ist ansonsten will return ein int =) inline CRect& GetPos(){return Pos;}; inline void SetPos(CPoint nPos){ CRect rect(nPos, nPos); rect.InflateRect(20,20); Pos=rect; <------------------ Übeltäter };Habe den Fehler gefunden. Nach einer gehörigen Debugsession hat sich rausgestellt das die Neue Position einfach nicht an Pos übergeben worden ist.
*argh*
Wollte das nur gesagt haben =).
Thread kann geclosed werden.