2009-10-29 11 views
5

Estoy construyendo una aplicación MFC C++ con "Usar conjunto de caracteres Unicode" seleccionado en Visual Studio. Tengo UNICODE definido, mis CStrings son de 16 bits, manejo nombres de archivos con caracteres japoneses, etc. Pero cuando pongo cadenas Unicode que contienen caracteres japoneses en un CComboBox (usando AddString), aparecen como ????? .¿Cómo identifica Windows las aplicaciones que no son Unicode?

Estoy ejecutando Windows XP Professional x64 (en inglés). Si utilizo las opciones regionales y de idioma del Panel de control de Windows, pestaña Avanzada y configuro el idioma para los programas que no son Unicode en japonés, mi cuadro combinado se ve bien.

Por lo tanto, quiero que mi cuadro combinado se vea bien, y quiero entender por qué la configuración de "Idioma para programas no Unicode" está cambiando el comportamiento de mi programa Unicode. ¿Hay algo más que deba hacer para decirle a Windows que mi aplicación es una aplicación Unicode?

¡Gracias por cualquier ayuda!

Respuesta

7

Windows conoce la diferencia entre los programas Unicode y no Unicode por las funciones que llaman. La mayoría de las funciones de la API de Windows vendrán en dos variantes, una que termina en A para no Unicode y otra que termina en W para Unicode. Los archivos de inclusión que definen estas funciones usarán las configuraciones del compilador para elegir una u otra automáticamente.

Es posible que los caracteres no estén saliendo correctamente porque ha seleccionado una fuente que no los incluye para que sea su fuente de UI predeterminada.

+0

Gracias, Mark. Cambié el "Idioma para programas no Unicode" a inglés, pero mi CComboBox todavía se ve bien. Estoy pensando que el interruptor instaló una fuente de sistema más grande que quedó atrás cuando volví al inglés. Tal vez eso es lo que quería decir con "font UI predeterminado"? No puedo encontrar ninguna otra referencia a una "fuente de UI predeterminada" aquí o en MSDN. –

+0

La fuente "MS Shell Dlg" utilizada en MFC es, de hecho, una asignación a la fuente UI predeterminada del sistema operativo. Consulte este artículo para obtener más información: http://support.microsoft.com/?scid=kb;en-us;282187&x=11&y=13 – djeidot

0

¿De dónde sacas las cuerdas? Si están codificados de forma rígida en sus fuentes C, entonces, en el momento en que llama a AddString, (lo más probable) ya están dañados.

Nada impide que uno tome una cadena Unicode, por ejemplo, la "aprieta" en std :: string y la dañe. Incluso si las aplicaciones se compilan como Unicode.

+0

Son cadenas wchar_t de 16 bits y se ven directamente en el depurador. Puedo hacer cualquier cosa con ellos, excepto agregarlos a un cuadro combinado. –

Cuestiones relacionadas