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 casten
    

    Ich 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äuft

    Peter



  • 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.


  • Mod

    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


Anmelden zum Antworten