ClientArea - Problem
-
Hi Leute, ich schreibe gerade ein kleines Wegfindungsprogramm, das für ein Schiff, das auf einer aus planquadraten bestehenden Karte den kürzesten Weg von "A" nach "B" finden soll. Nun mein Problem besteht jetzt darin, dass ich die ClientArea meiner Form komplett mit der Karte ausfüllen möchte bzw dass die Größe der ClientArea an die Kartengröße angepasst wird. Hier nun mein Code zum zeichnen:
void CZuseView::OnDraw(CDC* pDC) { CZuseDoc *ZuseDoc = GetDocument(); unsigned Heigth = ZuseDoc->GetCanal().GetHeigth(); unsigned Width = ZuseDoc->GetCanal().GetWidth(); CDC MemDC; MemDC.CreateCompatibleDC(pDC); CBitmap Bitmap; Bitmap.LoadBitmap(IDB_BITMAP_EMPTY); MemDC.SelectObject(&Bitmap); MemDC.PatBlt(0, 0, Width * SL + 1, Heigth * SL + 1, WHITENESS); for (unsigned x = 0; x < Width; ++x) for (unsigned y = 0; y < Heigth; ++y) { CBrush Brush; switch (ZuseDoc->GetCanal().GetGround(x, y)) { case CCanal::WATER: Brush.CreateSolidBrush(RGB(34, 112, 189)); break; case CCanal::EARTH: Brush.CreateSolidBrush(RGB(90, 164, 60)); break; } MemDC.SelectObject(&Brush); MemDC.Rectangle(x*SL, y*SL, (x+1)*SL + 1, (y+1)*SL + 1); pDC->BitBlt(0, 0, Width * SL + 1, Heigth * SL + 1, &MemDC, 0, 0, SRCCOPY); }
Wenn ich beim Draggen der Maus die Karte verändere, die dann neugezeichnet wird, flimmert der Bildschirm immer noch obwohl ich BitBlt benutze. Könnt ihr mir vielleicht noch sagen, was man an dem Codeabschnitt verbessern könnte?
Danke