Bild muss neu gezeichnet werden, aber nicht immer



  • Hallo.

    Ich habe eine Methode, die ungefähr so aufgebaut ist:

    bool MyClass::doit(){
    
     CBitmap bmp_done;
     CBitmap bmp_failed;
    
     bmp_done.LoadBitmap(IDB_BMP_DONE);
     bmp_failed.LoadBitmap(IDB_BMP_FAILED);
    
     if(true){
      m_Pic.SetBitmap(bmp_done);
      return true;
     }
     else{
      m_Pic.SetBitmap(bmp_failed);
      return false;
     }
     return false;
    }
    

    m_Pic ist ein Member CStatic Element und hat beim Start noch kein Bild geladen.
    Die Methode funktioniert so weit und zeigt das entsprechende Bild an.

    Ich reagiere nun noch auf den Rückgabewert..

    bool bState = mc.doit();
     if(bState){
      AfxMessageBox("done");
     }
     else AfxMessageBox("failed");
    

    So weit so gut, wenn ich aber die Meldung erhalte und per Zufall den Dialog noch neu zeichnen muss, sind die Bilder weg!! aber solange die Methode 'doit' läuft und der Dialog neu gezeichnet werden müsste, funktioniert es.

    Wo muss ich noch Code hinzufügen, damit die Bilder auch bei einem Dialogneuzeichen neu gezeichnet werden?

    OnPaint() habe ich gefunden, aber ich weiss nicht genau, was ich da für Code schreiben muss.. any help?? danke!

    PS: Die Methode wird innerhalb eines THreads aufgerufen, sollte aber aus meiner Sicht nicht speziell sein ...



  • Du musst AFAIK das Steuerelement in der OnPaint() mit dem aktuellen Bitmap initialisieren, könnte aber auch sein (und ist wahrscheinlich), dass sich das Static als eigenes Window selbst neuzeichnet.

    BTW:

    bool MyClass::doit(){
    
     CBitmap bmp_done;
     CBitmap bmp_failed;
    
     bmp_done.LoadBitmap(IDB_BMP_DONE);
     bmp_failed.LoadBitmap(IDB_BMP_FAILED);
    
      if(true) //-> ???? keine Abfrage oder Vergleich von Variable -> du kommst schwerlich irgendwann in den else-Bereich
     {
      m_Pic.SetBitmap(bmp_done);
      return true;
     }
     else{
      m_Pic.SetBitmap(bmp_failed);
      return false;
     }
     return false;
    }
    


  • das_brot schrieb:

    Du musst AFAIK das Steuerelement in der OnPaint() mit dem aktuellen Bitmap initialisieren, könnte aber auch sein (und ist wahrscheinlich), dass sich das Static als eigenes Window selbst neuzeichnet.

    BTW:

    bool MyClass::doit(){
    
     CBitmap bmp_done;
     CBitmap bmp_failed;
    
     bmp_done.LoadBitmap(IDB_BMP_DONE);
     bmp_failed.LoadBitmap(IDB_BMP_FAILED);
    
      if(true) //-> ???? keine Abfrage oder Vergleich von Variable -> du kommst schwerlich irgendwann in den else-Bereich
     
    ....
    }
    

    das wegen if(true) ist mir schon klar... habe ja in der richtigen if-Abrage auch einen anderen Ausruck. War nur zur vereinfachten Illustrierung gedacht gewesen :p



  • vielleicht:

    bool doit()
    {
        bool bRetValue=false;
        CBitmap bmp_done;
        CBitmap bmp_failed;
    
        bmp_done.LoadBitmap(IDB_BMP_DONE);
        bmp_failed.LoadBitmap(IDB_BMP_FAILED);
    
        if(true) //-> ???? keine Abfrage oder Vergleich von Variable -> du kommst schwerlich irgendwann in den else-Bereich
        {
            m_Pic.SetBitmap(bmp_done);
            bRetValue=true;
        }
        else
        {
            m_Pic.SetBitmap(bmp_failed);
        }
        m_Pic.Invalidate();   // erzwingt neuzeichnen des steuerelements !
        return bRetValue;
    }
    

Anmelden zum Antworten