Bei Text ausgabe (Win32) wird dahinter ein ")" angezeigt
-
Da gehört offensichtlich noch mehr zu deinem Programm. Reduziere dein Programm so weit, dass die verbliebenen Zeilen gerade noch den Fehler enthalten, und sonst nichts. Wahrscheinlich findest du den Fehler dabei sogar von alleine, weil du irgendwann einen Block Code entfernen wirst, von dem du denkst, dass er nichts mit dem Problem zu tun hat, danach aber das Problem plötzlich weg ist. Dann weißt du, wo der Fehler wirklich ist.
-
@gabrielix29 sagte in Bei Text ausgabe (Win32) wird dahinter ein ")" angezeigt:
wenn ich mit der Zahl vom Guthaben über 10.- komme und dann wieder darunter wird mir immer ein ) dahinter angezeigt
Das was wie ")" aussieht ist keine Klammer sondern der Rechte Teil der "0" die vorher dort stand.
TextOut
überschreibt halt einfach Pixel, und zwar nur innerhalb des rechteckigen Bereichs den der String benötigt. Einstellige Zahlen sind im Durchschnitt schmäler als zweistellige und daher bleibt rechts dann ein Bereich unbenutzt der vorher verwendet wurde. Und da bleiben dann einfach die Pixel stehen die vorher dort standen.Wenn du stattdessen
ExtTextOut
verwendest kannst du das Rechteck angeben in das der Text geschrieben werden soll. Unverwendete Bereiche werden dann mit der Hintergrundfarbe ausgefüllt (je nach Einstellungen im DC). Damit wird dann gelöscht was auch immer vorher dort stand.
-
Ok, das hatte ich jetzt nicht erwartet
Aber wenn wir schon bei Darstellungsformen sind, noch der obligatorische Hinweis: Fließkommazahlen sind von den Basisdatentypen der am wenigsten geeignete Typ zur Speicherung von diskreten Größen wie "Geld". Das Konzept einer Fließkommazahl möchte möglichst gut das Konzept eines kontinuierlichen Zahlenraums im Computer abbilden (und macht dafür anderswo Zugeständnisse), diskrete Größen wollen ganz bestimmte, feste Werte (und das ist gerade der Teil, wo die Fließkommazahlen Zugeständnisse machen).
Schau:
https://ideone.com/rj4haCWenn du dich nicht tiefer mit dem Thema auseinander setzen möchtest (was hieße, einen fertigen Typ für Geld zu benutzen, oder selber einen zu entwickeln), dann sind die Ganzzahltypen (
int
, etc.) ein gute Kompromiss, wo du einfach sagst, du rechnest in Cent:
https://ideone.com/wc7Sqh
-
@hustbaer Danke für den Hinweis das werde ich nachher einmal versuchen
-
@SeppJ sagte in Bei Text ausgabe (Win32) wird dahinter ein ")" angezeigt:
du rechnest in Cent
Bzw. wenn du dich gleich auf Buchhaltungsquargel und andere Währungen vorbereiten willst, nimm Faktor 10000 oder mehr (100000). Also 10000 = 1 EUR/USD/...
Für nen Colaautomaten tut's aber vermutlich wenn du Cent nimmst
-
ps: Falls
ExtTextOut
nicht funktionieren sollte (ist schon ne Weile her dass ich das verwendet habe), dann bleibt noch die Möglichkeit den Bereich einfach vorher mitFillRect
zu "löschen" und danach mitTextOut
/ExtTextOut
drüberzumalen.
-
oder du nimmst eine nichtproportionale schriftart.
-
Die Textausgabe sollte nur im
WM_PAINT
-Ereignishandler passieren, also innerhalb vonBeginPaint
undEndPaint
(und den DisplayContext-HandlehDC
erhält man dann als Rückgabewert vonBeginPaint
), s. Painting the Window.
Und da ist es üblich (wie von @hustbaer schon geschrieben), zuerst den gesamten Update-Bereich mit der Hintergrundfarbe zu füllen und erst danach die weiteren Elemente darüber zu zeichnen.
Besser ist es allerdings, dies imWM_ERASEBKGND
-Handler zu erledigen, s.a. Guide to WIN32 Paint for Intermediates.
-
@hustbaer sagte in Bei Text ausgabe (Win32) wird dahinter ein ")" angezeigt:
@SeppJ sagte in Bei Text ausgabe (Win32) wird dahinter ein ")" angezeigt:
du rechnest in Cent
Bzw. wenn du dich gleich auf Buchhaltungsquargel und andere Währungen vorbereiten willst, nimm Faktor 10000 oder mehr (100000). Also 10000 = 1 EUR/USD/...
Für nen Colaautomaten tut's aber vermutlich wenn du Cent nimmst
Ja, wenn man ernsthafte Buchhaltung betreiben will, dann sollte man dringend genauer über das Problem nachdenken. Da sind wir dann wieder beim speziell für die Anforderungen entwickelten Währungsdatentyp. Die professionellen Lösungen für das Problem sind unter der Haube meines Wissens nach genau das, was du vorschlägst, nämlich 10000stel-Teile in Ganzzahlvariablen. Damit ist es aber noch nicht getan, weil man ja auch noch definieren muss, wie man beispielsweise Prozentrechnung handhabt. Da gibt es gewiss genaue Vorschriften im Finanzwesen, die ich als Laie aber nicht kenne.
Falls an der oft erzählten Legende etwas dran sein sollte, von dem Programmierer, der sich die Divisionsreste von Banken auf das eigene Konto überwiesen hat, dann haben die aber wahrscheinlich auch nicht die letztgültige mathematisch exakte Lösung, sondern auch nur irgendwelche Vorgaben, an die man sich hält. Denn mit der perfekten Lösung könnte ja kein Rest bleiben.
-
@Wade1234 sagte in Bei Text ausgabe (Win32) wird dahinter ein ")" angezeigt:
oder du nimmst eine nichtproportionale schriftart.
Reicht nicht. Aber wenn er dann zusätzlich noch beim
sprintf
ne Fixlänge macht, dann ginge das.
-
Danke für eure Hilfe ich könnte das Problem lösen