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


Anmelden zum Antworten