CStatic-Problem

CodeFatal

Erfahrenes Mitglied
Hi @ All,

ich hab da (mal wieder) ein kleines Problem mit einem CStatic Element.

ich habe die Klasse CStatic zu CMyStatic abgeleitet.

Irgendwann wird zur Laufzeit eine Instanz sichtbar geschaltet.
Bei dem anschließenden Zeichenprozess wird innerhalb der CMyStatic::OnPaint() alles so gemacht wie ich es gern hätte.
Wird nach dieser Zeichenroutine aber nachträglich der Text geändert, so wird die oben genannte OnPaint() nicht aufgerufen. Folglich wird meine CMyStatic Instanz nicht richtig dargestellt.

Invalidiere ich mit der Funktion CMyStatic::Invalidate(...) diese Instanz zum Zeitpunkt, wo auch der Text geändert wird, Dann flackert es einmal kurz und anschließend wird die OnPaint() gerufen und ich erhalte das richtige Ergebnis.
Da der Text aber bereits ohne Invalidate() angezeigt wird muss es noch eine andere Stelle als die OnPaint() geben, wo ich Einfluss auf den Text nehmen kann. Nur wo ist die:confused:
Wär nett wenn ihr mir helfen könnt.

Wie ich mich kenn seh ich den Wald vor lauter Bäumen nicht:(

Gruß Michael
 
Da wird doch die WM_SETTEXT Message an das jeweilige Static gesendet.
Wenn ich das richtig verstanden hab ist ja noch keine Zeichenroutine. Ich werd die mal überladen und schauen was passiert.
 
Da wird doch die WM_SETTEXT Message an das jeweilige Static gesendet.
Wenn ich das richtig verstanden hab ist ja noch keine Zeichenroutine.
Wenn man bei einem normalen CStatic diese Methode aufruft, wird der Text doch auch sofort aktualisiert, ohne extra ein Invalidate() aufrufen zu müssen. Also scheint ja implizit ein Neuzeichnen ausgelöst zu werden.

Also egal wie ich die SetWindowText überlade wenn der Text sich ändert erhalte ich ein falsches Ergebnis:(
Warum denn SetWindowText überladen? Oder anders gefragt: Was machst du in deiner OnPaint()? Den Text, den du dort ausgibst, müsstest du dir doch mit GetWindowText() holen.

Gruß
MCoder
 
Ich zeichne einen Hintergrund hinter den Text und verschiebe den Text innerhalb der erlaubten Fläche. Ein paar Änderungen am Text werden auch noch gemacht.

Wenn ich die Funktion SetWindowText aufrufe, dann wird der Text inhaltlich auch geändert allerdings nciht über die OnPaint() sondern irgendwie anderes, mit dem Resultat, das meine tollen Änderungen nicht berücksichtigt werden.
 
Noch ein Kandidat für Zeichenoperationen ist OnEraseBkgnd (für WM_ERASEBKGND). Diese Methode solltest du auch überladen.
 
Alles schon geschen,
hab jetzt auch eine Lösung.

Für WinCe 5.0 brauchte ich keine Änderungen, für Win XP habe ich mir einen Merker von CString angelegt und und die Funktionen SetWindowText und GetWindowText überladen. Die beiden fürhen jetzt nicht mehr den Default Code aus. GetWindowText() gibt mir meinen eigenen Merker zurück. Die SetWindowText() setzt den Merker und Invalidiert die vom Static Element benutzte Fläche im SourceDlg.

Vielleicht nciht die schönste Lösung aber eine mit der ich leben kann und vor allem eine die funktioniert;)

Danke für die Mühen

Gruß Michael
 

Neue Beiträge

Zurück