none
MFC CView Rechteck vom Benutzer zeichnen lassen RRS feed

  • Frage

  • In meinem Programm soll der Benutzer ein Rechteck zeichnen. Der Benutzer sieht immer eine Vorschau vom Rechteck, wie in MS Paint etc.
    Wenn man nun aber das Rechteck in der vorschau wieder verkleinert bleiben die linien vom Alten Rechteck erhalten. Wie kann ich das beheben?
    hier ein bisschen Code:

    void
     Cdrawer2View::OnDraw(CDC* pDC)
    {
    pDC->Rectangle(m_rect);

    Cdrawer2Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if  (!pDoc)
    return ;
    }
    void
     Cdrawer2View::OnLButtonDown(UINT nFlags, CPoint point)
    {
    m_A = point;

    CView::OnLButtonDown(nFlags, point);
    }


    void  Cdrawer2View::OnLButtonUp(UINT nFlags, CPoint point)
    {
    m_B = point;
    m_A = CPoint(0, 0);
    CView::OnLButtonUp(nFlags, point);
    }


    void  Cdrawer2View::OnMouseMove(UINT nFlags, CPoint point)
    {
    if (m_A != CPoint(0, 0))
    {
    m_B = point;
    m_rect  = CRect(m_A.x, m_A.y, m_B.x, m_B.y);

                    InvalidateRect(m_rect);

    }
    CView::OnMouseMove(nFlags, point);
    }

    VisualCPlusPlus
    Donnerstag, 18. November 2010 17:18

Antworten

  • Du musst einfach das InvalidateRect auf die alten Koordinaten durchführen und anschließend für die neuen. Dadurch werden sowohl die Bereiche des alten wie des neuen Rects neu gezeichnet.

    Auch wenn Du später Optionen zum Verschieben einbauen willst ist das genauso. Invalidate immer auf beide Koordinaten, alt/neu.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 19. November 2010 06:50
    Moderator

Alle Antworten

  • Du musst einfach das InvalidateRect auf die alten Koordinaten durchführen und anschließend für die neuen. Dadurch werden sowohl die Bereiche des alten wie des neuen Rects neu gezeichnet.

    Auch wenn Du später Optionen zum Verschieben einbauen willst ist das genauso. Invalidate immer auf beide Koordinaten, alt/neu.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 19. November 2010 06:50
    Moderator
  • Es hat zwar funktioniert, aber verstehen tu ich das immer noch nicht ganz. Nach meiner Logik überzeichne ich das Alte Rechteck doch nur nochmal mit genau den Selben Koordinaten.
    VisualCPlusPlus
    Freitag, 19. November 2010 16:32
  • Also:
    1. Du hast ein großes Rechteck.
    2. Jetzt wird es kleiner gezogen.
    3. Dein Code hat immer den Bereich des "Neuen" Rechteckes invalidiert.
    4. D.h der kleinere Rechteckbereich wird nur neu gezeichnet. Das große bestehende Rechteck bleibt auf der Anzeige stehen.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 19. November 2010 18:02
    Moderator
  • Ach so...
    Jetzt ist mir alles klar. Danke für die Antort und Erklärung!


    VisualCPlusPlus
    Freitag, 19. November 2010 18:26