Flimmern beim Zeichnen
-
Hallo Leute,
ich habe mein Problem schon oft beschrieben, doch leider bekam ich nie eine Antwort, die mir wirklich weiter geholfen hat.
Trotzdem versuch ich es noch mal:
Also, auf einem CFormView wird eine Karte aus Planquadraten gezeichnet, die aus Wasser oder aus Erde bestehen. Das Zeichnen habe ich folgendermaßen implementiert:void CZuseView::OnDraw(CDC* pDC) { CZuseDoc *ZuseDoc = GetDocument(); CCanal &Canal = ZuseDoc->GetCanal(); unsigned Heigth = Canal.GetHeigth(); unsigned Width = Canal.GetWidth(); CDC MemDC; MemDC.CreateCompatibleDC(pDC); MemDC.SelectObject(m_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; if (Canal.IsEarthAt(x,y)) Brush.CreateSolidBrush(RGB(90, 164, 60)); else if (Canal.IsWaterAt(x,y)) Brush.CreateSolidBrush(RGB(34, 112, 189)); 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); }
Das "SizeToContent"-Problem, dass ich damals hier (ClientArea - Problem) beschrieben habe, habe ich mittels SetScrollSizes und ResizeParentToFit gelöst.
Nichtsdestotrotz flimmert der Bildschirm, wenn ich beim Mouse-Draggen die Karte verändere, und wenn dadurch das Fenster neugezeichnet wird.
-
Wie groß ist die Fläche die du neu zeichnest ?
Devil
-
Die Fläche ist 75x450 Pixel groß.
-
Such mal nach "BackBuffer". Ich glaub das gibts im MFC FAQ..
-
ich habs irgendwie nicht gefunden.
-
WM_ERASEBKGND überschreiben und 1 zurückgeben