Benutzer mit den meisten Antworten
MFC CView Rechteck vom Benutzer zeichnen lassen

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
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- Als Antwort vorgeschlagen Martin RichterModerator Freitag, 19. November 2010 13:28
- Als Antwort markiert KK Senior Freitag, 19. November 2010 16:29
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- Als Antwort vorgeschlagen Martin RichterModerator Freitag, 19. November 2010 13:28
- Als Antwort markiert KK Senior Freitag, 19. November 2010 16:29
-
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