C++ - WinAPI - TextOut()

Crash Kid

Erfahrenes Mitglied
Hallo an alle,

vermutlich wurde schon mal ein Thread dieser Art erstellt, aber ich konnte ihn leider nicht finden. Google bietet mir auch nicht die richtigen Ergebnisse, darum stelle ich diese Frage jetzt doch hier.

Ich habe ein Programm geschrieben, welches ein Child-Fenstererstellt. In diesem Child-Fenstergebe ich eine Varriable (char cTest[100]) mit Hilfe von TextOut() aus. Wenn ich nun den Inhalt diser Varriable änder, und das Child-Fenster aktuallisiere, bleibten die letzten Zeichen des vorherigen Inhalts stehen. Passiert nur, wenn der neue Inhalt weniger Zeichen hat, wie der alte (ist ja logisch :) ).

Nun meine Frage, was muss ich machen, damit alle "alten" Zeichen aus dem Zeichenbereich verschwinden?

Es liegt nicht am Inhalt der Varriable, weil der wirklich nur die "neuen" Zeichen beinhaltet. Folglich bringt ein "\0" am Ende auch nichts.
Das einzige was hilft ist, alle Zeichen mit LEERZEICHEN zu überschreiben, aber das kann ja kaum die Lösung sein.

Vielen Dank für alle Antworten

grüße
 
Hallo,

zuerst mal die Frage, an welcher Stelle zeichnest du denn den Text? Doch hoffentlich im Paint-Event des Child-Windows.

Wenn sich der Fensterinhalt ändert und daher das Fenster neu gezeichnet werden muss, wird der bisherige Inhalt mit der Funktion Invalidate() oder InvalidateRect() als ungültig gekennzeichnet und das Paint-Event ausgelöst. Standardmäßig wird dabei der Fensterinhalt gelöscht, d.h. mit der Hintergrundfarbe überschrieben.

Gruß
MCoder
 
Hallo,

ja ich zeichne den Text in der WM_PAINT mithilfe von BeginPaint() und EndPaint(). Ich zeichne dann auch das Child-Fenster mit InvalidateRect(hChildWnd, NULL, TRUE) neu. Der Befehl kommt aus einem Thread heraus, genauso wie die Änderung der Char-Varriable.
Was ich jetzt auch rausgefunden habe ist, dass es doch nicht an dem neuZeichnen liegt sondern daran, dass wenn ich einen neuen 0-terminierten-String einlese, die Funktion TextOut() den kompletten String schreibt. Also auch was nach dem "\0" steht, was z.B. MessageBox() nicht macht. Gibt es dann auch andere Funktionen wie TextOut(), die nur die Zeichen bis "\0" zeichnen?

grüße
 
Hi,

danke, hab ich auch grad rausgefunden. Ich habe immer TextOut(..., cVarriable, sizeof(cVarriable)); geschrieben. Wenn ich TextOut(..., cVarriable, strlen(cVarriable)); mache, dann passt alles.

Danke

grüße
 
Zurück