Komische Zeichen beim Einlesen von Edit
-
Hallo zusammen,
gleichmal vorweg: Normalerweise arbeite ich mit Borland c++, verzeiht mir also bitte falls die Frage 'dämlich' ist.
Für eine Laboraufgabe (Studium) muss ich folgendes machen:
- 3 Editfelder einlesen (Name, Vorname, Matrikelnummer
- Ausgabe der Informationen in einer Zeile einer Listbox
Es muss sich bei dem Projekt um ein Win32 Projekt mit oberfläche handeln.Das Einlesen/Ausgeben eines Edit-Feldes ist bereits vorgegeben.
1. Problem: (Nutze Visual Studio 2005/Win7)
Bei der Ausgabe hängt hinten an dem eingegebenen Namen noch ein/mehrere Sonderzeichen mit dran, meistens chinesische Buchstaben. Dies ist bereits in dem vorgegebenen Programm so drin.hwndEdit1 = CreateWindow ( _T("edit"), _T(""), WS_CHILD | WS_VISIBLE | WS_BORDER, 250, 150, 180, 20, hwnd, (HMENU)3, ((LPCREATESTRUCT) lParam)->hInstance, NULL); ... // Zeilenlänge der Eingabe ermitteln iLength = (int) SendMessage(hwndEdit1, EM_LINELENGTH, 0, 0); // Speicher mit entsprechender Länge pszBuffer = malloc(iLength); // Anzeige in Listbox SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM) (LPCSTR) pszBuffer); SetWindowText(hwndText2, (LPWSTR) pszBuffer); // auf const char string zu castenIch vermute mal, dass es bei der Ausgabe was falsch läuft, da die eingelesene Zeichenlänge richtig ist.
2. Problem:
Für die Erweiterung muss ich 3 Edits einlesen. Soweit kein Problem.
Jedoch muss ich die Strings dann kombinieren, bevor ich sie in die Listbox schreibe. Bisher sind alle meine Versuche fehlgeschlagen.
Folgendes habe ich mir überlegt: Speicherbedarf der drei Strings bestimmen, alle in einen Speicherbereich schreiben, Ausgeben.
Falls ja: Wie?Wäre toll wenn mir jemand etwas unter die Arme greifen könne.
Peter
-
Ich vertsehe nicht, warum du pszBuffer nichts zuweist (also keinen STring mit GetWindowText)...
Du reservierst nur Speicher, aber du schreibst nichts rein.
-
Sry, da ist mir eine Zeile weggerannt.
SendMessage(hwndEdit1, EM_GETLINE, 0, (LPARAM) (LPCSTR) pszBuffer);muss natürlich nach malloc hin.
Peter
-
Ich weiß nicht ob dass hier passt:
Microsoft Windows NT/Windows 2000/Windows XP : For an ANSI application, the system converts the text in a list box to Unicode using CP_ACP. This can cause problems. For example, accented Roman characters in a non-Unicode list box in Japanese Windows will come out garbled. To fix this, either compile the application as Unicode or use an owner-drawn list box.
aus MSDN
-
Hmm,
das hatte ich zwar schon gelesen, bin aber davon ausgegangen dass das nur der Fall ist, wenn man unsere Schriftzeichen in eine nicht-Unicode Anwendung eingibt die z.B. auf einem Japanischen system läuftPeter
-
Ja stimmt...
Also ich mach das immer so mit GetWindowText(hwnd, pszBuffer, GetWindowTextLength(hwnd)+1);
Dann so wie du mit Listbox anzeigen.Nur so als Anmerkung:
Du solltest malloc nach (char*) casten, ist zwar nicht die Lösung für dein problem sondern nur nen Tipp.
-
Erfolgsnachricht:
Jetzt funktioniert es. Lösung: Bei den Präprozessoranweisungen das standardmäßig enthaltene Unicodezeugs rausschmeißen.Vielen Dank.
-
Peter_ schrieb:
Lösung: Bei den Präprozessoranweisungen das standardmäßig enthaltene Unicodezeugs rausschmeißen.
Die bessere Lösung ist immer noch mit Unicode und MBCS richtig umzugehen
SCNR