Dialog-Member werde nicht angezeigt



  • Hallo zusammen,

    ich habe einen Dialog, der mehrere Member von Klassentypen hat. In der OnPaint-Methode des Dialoges wird die Funktion Paint(...) aller Member gerufen, die sich damit selber zeichnen.
    Jetzt habe ich das Problem, dass die OnPaint-Methode und auch die Paint-Methoden aller Member gerufen werden, die Member aber trotzdem nicht gezeichnet werden. Erst wenn ich in den Dialog klicke - und damit nochmal die OnPaint-Methode gerufen wird - werden auch die Member angezeigt.

    Zur Verdeutlichung etwas Code:

    class Member
    {
       public:
          void Paint (CPaintDC& dc, CPoint ref);
       private:
    };
    
    void Member::Paint(CPaintDC& dc, CPoint ref)
    {
       dc.Rectangle( ref.x - 15, ref.y - 60, ref.x + 15, ref.y - 20);
       printf("Paint von Member aufgerufen\n");
    }
    
    void CDlgConv::OnPaint()
    {
       if (IsIconic())
       {
          // tu was anderes
       }
       else
       {
          CPaintDC dc(this); // device context for painting
          CPoint ref1(0,0);
    
          for ( int i=0; i < anzMember; i++ )
          {
             m_pMember[i]->Paint(dc, ref1);
             ref1.x += 40;
          }
       }
    }
    

    Wenn ich jetzt - wodurch ist nebensächlich - einmal die Funktion OnPaint aufgerufen bekomme sehe ich anzMember-mal den Text "Paint von Member aufgerufen", jedoch keine Rechtecke. Wenn ich aber nochmal in den Dialog klicke bekomme ich wieder anzMember-mal den Text "Paint von Member aufgerufen" und diesesmal erscheinen auch die Rechtecke.

    Kann mir bitte jemand erklären, woran das liegt? Bin eingermaßen ratlos.

    Danke vorab und viele Grüße


  • Mod

    Wahrscheinlich war der Dialog schon gezeichnet...
    Versuch mal nach der Bereitstellung Deiner Klassen ein InvalidateRect...



  • Hi,

    tatsächlich, ein Invalidate hat die Erlösung gebracht.
    Hab schon alles mögliche von UpdateWindows bis sonstwas probiert, aber beim Invalidate war ich noch nicht...

    Viele Dank und viele Grüße


  • Mod

    Ein UpdateWindow zeichent nur dann ein Fenster neu, wenn es nicht mehr valide ist...

    Lies mal etwas Grundlagen Technik zu Windows...


Anmelden zum Antworten