2009-10-29 13 views
5

Buduję aplikację MFC C++ z "Użyj zestawu znaków Unicode" wybranego w Visual Studio. Mam zdefiniowany UNICODE, moje CStrings są 16-bitowe, obsługuję nazwy plików z japońskimi znakami itp. Ale kiedy umieszczam ciągi Unicode zawierające japońskie znaki w CComboBox (używając AddString), pojawiają się jako ????? .W jaki sposób system Windows rozpoznaje aplikacje nieobsługujące kodu Unicode?

Używam systemu Windows XP Professional x64 (w języku angielskim). Jeśli używam opcji regionalnych i językowych panelu sterowania systemu Windows, karty Zaawansowane i ustawię język dla programów innych niż Unicode na japoński, moje pole kombi wygląda prawidłowo.

Tak więc chcę, aby moje pole kombi wyglądało prawidłowo, i chcę zrozumieć, dlaczego ustawienie "Język dla programów nieobsługujących kodu Unicode" zmienia zachowanie mojego programu Unicode. Czy jest coś jeszcze, co powinienem zrobić, aby powiedzieć Windowsowi, że moja aplikacja jest aplikacją Unicode?

Dzięki za wszelką pomoc!

Odpowiedz

7

System Windows zna różnicę między programami Unicode i nieobsługującymi kodu Unicode przez funkcje, które wywołują. Większość funkcji Windows API będzie dostępna w dwóch wariantach, z których jeden kończy się A dla nie-Unicode, a drugi dla W dla Unicode. Pliki włączające, które definiują te funkcje, będą używać ustawień kompilatora do automatycznego wyboru jednego lub drugiego.

Znaki mogą nie wyświetlać się prawidłowo, ponieważ wybrano czcionkę, która nie zawiera ich jako domyślnej czcionki interfejsu użytkownika.

+0

Dzięki, Mark. Zmieniłem "Język dla programów nieobsługujących kodu Unicode" z powrotem na angielski, ale mój CComboBox nadal wygląda dobrze! Myślę, że przełącznik zainstalował większą czcionkę systemową, która została, gdy wróciłem do angielskiego. Być może to właśnie masz na myśli przez "domyślną czcionkę interfejsu użytkownika"? Nie mogę znaleźć żadnych innych odniesień do "domyślnej czcionki UI" tutaj lub na MSDN. –

+0

Czcionka "MS Shell Dlg" używana w MFC jest w rzeczywistości mapowaniem do domyślnej czcionki UI systemu operacyjnego. Sprawdź ten artykuł, aby uzyskać więcej informacji: http://support.microsoft.com/?scid=kb;en-us;282187&x=11&y=13 – djeidot

0

Skąd masz napisy? Jeśli są one zakodowane na stałe w źródłach C, to w momencie, gdy wywołasz AddString, są one (najprawdopodobniej) już uszkodzone.

Nic nie przeszkadza w zażyciu ciągów Unicode, "ściska" go na przykład w std :: string i niszczy. Nawet jeśli aplikacje są skompilowane jako Unicode.

+0

Są to 16-bitowe ciągi wchar_t i wyglądają poprawnie w debugerze. Mogę zrobić z nimi wszystko, oprócz dodania ich do pola kombi. –

Powiązane problemy