2009-10-29 19 views
5

Visual Studio'da "Unicode Karakter Kümesini Kullan" seçeneğiyle bir MFC C++ uygulaması yapıyorum. UNICODE tanımlıyım, CStrings'im 16-bit, bende Japonca karakterleri olan dosya isimlerini ele alıyorum, vb. Ancak, CComboBox'ta (AddString kullanarak) Japonca karakterler içeren Unicode dizeleri koyarken ????? .Windows Unicode olmayan uygulamaları nasıl tanımlar?

Windows XP Professional x64 çalıştırıyorum (ingilizce). Windows Denetim Masası Bölge ve Dil Seçenekleri, Gelişmiş Sekmesi'ni kullanır ve Unicode olmayan programların Dilini Japonca'ya ayarlarsam, açılan kutum doğru görünüyor.

Bu yüzden, birleşik kutucumun doğru görünmesini istiyorum ve Unicode programımın davranışını değiştirmenin neden "Unicode olmayan programların dili" ayarı olduğunu anlamak istiyorum. Windows'a uyguladığımın bir Unicode uygulaması olduğunu söylemek için yapmam gereken başka bir şey var mı?

Yardımlarınız için teşekkürler!

cevap

7

Windows, Unicode ve Unicode olmayan programlar arasındaki farkları çağıran işlevlere göre bilir. Çoğu Windows API işlevi, biri Unicode olmayan ve bir tanesi Unicode için W ile biten iki varyantta gelir. Bu işlevleri tanımlayan içerme dosyaları, derleyici ayarlarını otomatik olarak sizin için birini veya diğerini seçmek için kullanır.

Varsayılan UI yazı tipinizi içermeyen bir yazı tipi seçtiğiniz için karakterler düzgün şekilde gelmeyebilir.

+0

Teşekkürler, Mark. "Unicode olmayan programlar için dil" ini tekrar ingilizceye çevirdim, fakat CComboBox'ım hala doğru görünüyor! Anahtarın ingilizceye döndüğümde geride kalan daha büyük bir sistem yazı tipi yüklediğini düşünüyorum. Belki de "varsayılan UI yazı tipi" ile ne demek istediniz? Burada veya MSDN'de "varsayılan UI yazı tipine" başka herhangi bir başvuru bulamıyorum. –

+0

MFC'de kullanılan "MS Shell Dlg" yazı tipi aslında, işletim sisteminin varsayılan UI yazı tipinin bir eşlemesidir. Daha fazla bilgi için şu makaleye bakın: http://support.microsoft.com/?scid=kb;en-us;282187&x=11&y=13 – djeidot

0

Dizeleri nereden alıyorsunuz? C kaynaklarınızda kodlanmışlarsa, o zaman AddString dediğiniz sırada (büyük olasılıkla) hasar görmüşlerdir.

Hiçbir şey bazı Unicode dizelerini almayı engeller, örneğin std :: string'ini sıkıştırır ve ona zarar verir. Uygulamalar Unicode olarak derlenmiş olsa bile.

+0

Bunlar 16 bit wchar_t dizeleridir ve hata ayıklayıcısına bakarlar. Onlarla birlikte açılan kutuya eklemek dışında her şeyi yapabilirim. –

İlgili konular