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
-
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
-
Ein UpdateWindow zeichent nur dann ein Fenster neu, wenn es nicht mehr valide ist...
Lies mal etwas Grundlagen Technik zu Windows...