[wxWidgets] wxBitmap wird nicht gezeichnet, oder es wird nicht auf das Bitmap gezeichnet



  • Hi, ich bins schon wieder.
    Sehr weit gekommen bin ich nicht, denn nun habe ich folgendes Problem:
    Ich zeichne zunächst auf ein wxBitmap und dann das wxBitmap auf das Fenster.
    Allerdings wird es nicht gezeichnet(alles andere wird aber gezeichnet).
    Der relevante Codeteil sieht folgendermaßen aus:

    void ImageWindow::CreateNewImage(wxSize imgSize)
      {
      this->Image = new wxBitmap(imgSize.GetWidth(), imgSize.GetHeight());
      this->ImgDC->SelectObject(*Image);
      this->ImgDC->SetPen(*wxTRANSPARENT_PEN);
      this->ImgDC->SetBrush(*wxWHITE_BRUSH); 
      this->ImgDC->DrawRectangle(0, 0, imgSize.GetWidth(), imgSize.GetHeight()); 
      }
    
    void ImageWindow::OnPaint(wxPaintEvent&)
      {     
      wxBufferedPaintDC graphics(drawingPanel);
      graphics.SetPen(*wxTRANSPARENT_PEN);
      graphics.SetBrush(*wxGREY_BRUSH);
      graphics.DrawRectangle(0, 0, this->GetSize().GetWidth(), this->GetSize().GetHeight());
      graphics.DrawBitmap(*Image, 0, 0);                     
      }
    

    Da ja alles andere gezeichnet wird, was ich ihn zeichnen lasse, nehme ich an, das Problem liegt beim zeichnen auf das Bitmap, nur was mache ich da falsch?


  • Mod

    Von welchem Typen ist ImgDC?



  • wxMemoryDC*


  • Mod

    Ich weiss nicht wirklich, wie der MemDC seine Daten in das Bitmap packt, wenn er es jetzt nicht tut, tut er es evtl. bei seiner Zerstörung.
    In der Doku gibt es jedenfalls den Hinweis, das man ihn Zerstören muss, wenn man das Bitmap in einen anderen MemDC packen will.

    Und Überhaupt, wo erstellst du den MemDC?

    Und btw. this-> kannst du dir sparen 😉



  • Ich weiß, dass ich mir this spaaren kann, aber es öffnet Intellisense und wenn ich es nur manchmal verwende ist es nicht wirklich lesbar^^

    Beim Aufruf der Init Methode(aus den Konstruktoren aufgerufen) erstelle ich ImgDC

    this->ImgDC = new wxMemoryDC();
    

    Und ja, es zeichnet tatsächlich wenn ich ImgDC zerstöre. Aber aus Performancegründen ist das jetzt nicht wirklich machbar, bei dem was ich vorhab, gibt es nicht noch eine andere Methode das zeichnen zu erzwingen?


  • Mod

    Leg den DC in der Methode auf dem Stack jeweils an.
    Macht man ja auch mit allen anderen DCs in wxWidgets so.
    Daher wohl auch dieses Verhalten.


Anmelden zum Antworten