2009-10-29 9 views
5

Ich erstelle eine MFC C++ - Anwendung mit "Unicode-Zeichensatz verwenden" in Visual Studio ausgewählt. Ich habe UNICODE definiert, meine CStrings sind 16-Bit, ich handle Dateinamen mit japanischen Zeichen, usw. Aber wenn ich Unicode-Strings mit japanischen Zeichen in eine CComboBox (mit AddString) setze, erscheinen sie als ????? .Wie erkennt Windows Nicht-Unicode-Anwendungen?

Ich verwende Windows XP Professional x64 (in Englisch). Wenn ich die Regions- und Sprachoptionen der Windows-Systemsteuerung, die Registerkarte "Erweitert" und die Sprache für Nicht-Unicode-Programme auf Japanisch setze, sieht mein Kombinationsfeld richtig aus.

Also, ich möchte mein Kombinationsfeld richtig aussehen, und ich möchte verstehen, warum die Einstellung "Sprache für Nicht-Unicode-Programme" das Verhalten meines Unicode-Programms ändert. Gibt es noch etwas, was ich tun sollte, um Windows zu sagen, dass meine Anwendung eine Unicode-Anwendung ist?

Vielen Dank für jede Hilfe!

Antwort

7

Windows kennt den Unterschied zwischen Unicode- und Nicht-Unicode-Programmen durch die aufgerufenen Funktionen. Die meisten Windows-API-Funktionen werden in zwei Varianten angeboten, von denen eine in A für Nicht-Unicode und die andere in W für Unicode endet. Die Include-Dateien, die diese Funktionen definieren, verwenden die Compilereinstellungen, um das eine oder das andere für Sie automatisch auszuwählen.

Die Zeichen werden möglicherweise nicht richtig ausgegeben, weil Sie eine Schriftart ausgewählt haben, die sie nicht als Standard-UI-Schriftart enthält.

+0

Danke, Mark. Ich habe die "Sprache für Nicht-Unicode-Programme" wieder auf Englisch geändert, aber meine CComboBox sieht immer noch richtig aus! Ich denke, der Schalter installiert eine größere Systemschrift, die zurückgelassen wurde, wenn ich zurück nach Englisch ging. Vielleicht haben Sie das mit "Standard-UI-Schriftart" gemeint? Ich kann keine anderen Verweise auf eine "Standard-UI-Schriftart" hier oder auf MSDN finden. –

+0

Die Schriftart "MS Shell Dlg", die in MFC verwandt wird, ist in Wirklichkeit eine Zuordnung zu der Standardschriftart Benutzeroberfläche des Betriebssystems. In diesem Artikel finden Sie weitere Informationen: http://support.microsoft.com/?scid=kb;en-us;282187&x=11&y=13 – djeidot

0

Woher bekommen Sie die Fäden? Wenn sie in Ihren C-Quellen fest codiert sind, sind sie zum Zeitpunkt des Aufrufs von AddString (höchstwahrscheinlich) bereits beschädigt.

Nichts verhindert, dass man eine Unicode-Zeichenkette nimmt, "quetscht" sie zum Beispiel in eine std :: string und beschädigt sie. Auch wenn die Anwendungen als Unicode kompiliert werden.

+0

Sie sind 16-Bit-Zeichenfolgen wchar_t, und sie sehen im Debugger richtig aus. Ich kann alles mit ihnen machen, außer sie zu einem Kombinationsfeld hinzuzufügen. –

Verwandte Themen