Wie kann man ein Ansi CStatic mit Unicode füttern?
-
Hallo,
ich will eine bestehende ANSI Applikation mit Sprachdateien ausrüsten.
Ich denke mal ohne Unicode hat das keine Zukunft.
Meine Follower würden gerne die Übersetzung machen, daher denke ich das sie einfach die Texte in einer Unicode TXT Datei bekommen und loslegen sollen.
Wie bekomme ich aber nun den Unicode in ein Ansi CStatic Feld in einem ANSI Programm?
SetWindowsTextW() ist ja in einem ANSII Programm nicht gültig.
Ein Unicode Zeichen besteht ja aus 2 byte.
Ich denke mir das ein UNICODE Zeichen aus der bisherigen ASCII Tabelle besteht und einer Zahl der gewünschten Zeichensatztabelle, so müsste man das CStatic ja nur auf eine Zeichensatztabelle setzen und die ANSII Zeichen reinsetzen?Oder geht das noch einfacher?
Das hier habe ich auch gefunden, ist das ohne SetFont möglich:
// Display test Unicode string wchar_t wstr[2]; wstr[0] = 0x101; wstr[1] = 0; ::SetWindowTextW(mywindowhandle, wstr);
Grüße,
TheNoName
-
Wieso ist SetWindowTextW in einem MBCS Programm nicht gültig?
Natürlich ist es das... Du kannst SetWindowTextA und SetWindowTextW jederzeit einfach so verwenden.In einem Windows System mit Themes sind eigentlich alle Fenster immer Unicode Fenster. Die Frage ist eher wie intern konvertiert wird.
-
Das Textfeld zeigt nur ??? für die Unicode Zeichen.
Compiliere ich mit unicode, dann stimmen die Zeichen.
Ich suche den Weg ein CEdit nachträglich auf Unicode zu switchen. (Style?)Noch merkwürdiger:
阿里巴巴Diese Zeichenfolge besteht aus 4 Zeichen mit je 3 Byte.
In der Unicode CEdit lässt sich das von hier dort reinkopieren. Wird correct angezeigt.
Ist CEdit nicht UTF16 wegen der Wide Declaration?? UTF24 dürfte dort doch gar nicht funktionieren.
-
Also wie ich IsWindowUnicode verstehe wird das gar nicht gehen, solange nicht RegsiterClassW bzw., CreateWindowW verwendet wurde.
Der Unicode String wird immer in MBCS gewandelt.
Nachtrag:
http://stackoverflow.com/questions/417004/unicode-characters-in-window-caption
-
Ok, wenn ich das nun richtig verstanden habe dann kann ich Wide Characters senden und es erscheint als ?? wenn meine lokale Sprachen Einstellung nicht passt.
Wenn dies jedoch auf einem Rechner mit den Language Settings auf CP/Regional läuft dann erscheint es wieder korrekt.
Ansonsten müsste ich es schaffen die Fenstereigenschaften einzulesen, das CEdit zu löschen und neu zu erstellen mit denselben Eigenschaften.
-
Hat nicht funktioniert.
Die obigen Zeichen aus einem Dokument mit UTF16 hat die Zeichen nicht wiedergegeben wenn ich das Unicode System im CP auf nacheinander alle China Möglichkeiten gestellt habe.
Kann man nicht den RegisterClass(Ex)W erneut ausführen?
-
Nein! Es gibt keine Chance aus, dass das Fenster mit CreateWindowExW auszuführen. Registrieren tust Du die Klasse ja sowieso nicht. Das ist ja schon passiert.
-
thenoname schrieb:
Noch merkwürdiger:
阿里巴巴Diese Zeichenfolge besteht aus 4 Zeichen mit je 3 Byte.
Wie, 3 Byte? In welchem Encoding? UTF-8 das von Windows genau nirgends verwendet wird? Und... so what?
In der Unicode CEdit lässt sich das von hier dort reinkopieren. Wird correct angezeigt.
Korrekt schreibt man mit k.
Ist CEdit nicht UTF16 wegen der Wide Declaration?? UTF24 dürfte dort doch gar nicht funktionieren.
Was soll eine "Wide Declaration" sein? Und UTF24 gibt es nicht.