1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

C++ - WinAPI - TextOut()

Dieses Thema im Forum "C/C++" wurde erstellt von Crash Kid, 1. Mai 2012.

  1. Crash Kid

    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
  2. MCoder

    MCoder Premium-User

    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
  3. Crash Kid

    Crash Kid Erfahrenes Mitglied

    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
  4. deepthroat

    deepthroat Premium-User

    Hi.

    Du mußt lediglich bei TextOut die Länge der Zeichenkette als letzten Parameter angeben.

    Gruß
  5. Crash Kid

    Crash Kid Erfahrenes Mitglied

    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

Diese Seite empfehlen