Hilfe: Unicode String in Editbox oder Richedit ausgeben??



  • Hallo!

    Über eine vorhandene Programmroutine hole ich aus einer SQL-Datenbank Daten.
    Nun habe ich einen String vom Typ wchar_t, in dem z.b. kyrillische Zeichen enthalten sind. Im Speicher sehe ich auch die entsprechenden Hexadezimal-Werte.

    Jetzt zur Frage, wie kann ich diesen Wide Character String in einer EditBox oder Richeditbox ausgen.
    Habe schon mehrere Varianten ausprobiert, z.b.:
    ::SetWindowTextW(GetDlgItem(IDC_RICHEDIT1)->m_hWnd, name); //wchar_t name;
    klappt nicht.
    EditBox und Richedit zeigen nur ???????? anstatt die wirklichen Zeichen.
    Schriftart in der Editbox ist auf eine Unicodefähige Schriftart umgestellt.



  • Verwendet dein Programm denn Unicode-Zeichensatz?



  • Ein Lösungsansatz: Stell dein komplettes Projekt auf Unicode-Unterstützung um (wenn du überall mit TCHAR und Familie gearbeitet hast, reicht dazu ein Häkchen in den Projekt-Einstellungen - aber auch sonst ist die Umstellung den Aufwand wert). Die ANSI-Version der Fenster(elemente) dürfte nicht besonders mit Unicode-Eingaben zurechtkommen (bzw. alles jenseits des normalen Zeichenbereiches als '?' darstellen).



  • Also momentan wird nicht unicode compiliert. ich werde mal schauen, ob ich das hinbekomme --- 2000Zeilen Code 😞



  • dmopate schrieb:

    2000Zeilen Code 😞

    Wie süß! Ich hab hier den Code von 60 Mannjahren, der umgestellt werden muss.


  • Mod

    IMHO müsste es egehen. Welches OS hast Du denn?

    BTW: 2000 Zeilen Code ist wirlich ein Witz.
    Ich habe gerade unser Hauptproject umgestellt und das waren ca. 2500 Sourcedateien und um die 50MB Source Code!

    Da wir alerdings konsequent die TCHAR Notation in "fast allen" Bereichen genutzt haben, dauerte die Umstellung bis zur ersten lauffähigen Testversion nur 10 Manntage.



  • ok ok, das mit den Zeilen nehme ich wieder zurück.
    Aber ich habe es hinbekommen:
    [code]

    SETTEXTEX wParamOUT;

    wParamOUT.codepage = 1200;
    wParamOUT.flags = ST_SELECTION;
    ...
    SendMessageW(GetDlgItem(IDC_RICHEDIT1)->m_hWnd, // handle to destination control
    EM_SETTEXTEX, // message ID
    (WPARAM) &wParamOUT, // = (WPARAM) () wParam;
    (LPARAM) name); // = (LPARAM) () lParam;;

    wobei name vom typ wchar_t die Zeichen enthält...
    ob es jetzt gerade die eleganteste Lösung ist weiß ich nicht


Anmelden zum Antworten