При использовании Intel C++ Compiler 8 в колонках CListCtrl пропадают русские буквы. Вместо них просто черные квадраты... (( При использовании внутреннего компилера студии все работает нормально. Как быть? Кто знает как это лечится?
О себе: Visual Studio 2003, программа использует MFC и UNICODE.
Здравствуйте, Stepanov, Вы писали:
S>При использовании Intel C++ Compiler 8 в колонках CListCtrl пропадают русские буквы. Вместо них просто черные квадраты... (( При использовании внутреннего компилера студии все работает нормально. Как быть? Кто знает как это лечится? S>О себе: Visual Studio 2003, программа использует MFC и UNICODE.
Если строки зашиты в код, а не в ресурсы, попробуйте #pragma setlocale().
Здравствуйте, SchweinDeBurg, Вы писали:
SDB> попробуйте #pragma setlocale().
Не помогает... И в свойствах диалога русский стоит, и #pragma setlocale("rus") в StdAfx.h прописал... Причем проблема только при использовании Юникода.
Здравствуйте, Stepanov, Вы писали:
S>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>> попробуйте #pragma setlocale().
S>Не помогает... И в свойствах диалога русский стоит, и #pragma setlocale("rus") в StdAfx.h прописал... Причем проблема только при использовании Юникода.
А если так:
#pragma setlocale("Russian_Russia.1251")
Причем в том .cpp, в котором есть строчки на русском.
Здравствуйте, Stepanov, Вы писали:
SDB>>#pragma setlocale("Russian_Russia.1251") SDB>>Причем в том .cpp, в котором есть строчки на русском.
S>Аналогично... Причем пробовал и в тот .cpp где строчки на русском, и в StdAfx.h Результат один — его отсутствие.
Хорошо, давайте еще один эксперимент — пихнуть в контрол русскую строчку из ресурсов.
Прямо мысли закрадываются, что разрекламированный компилер плохо дружит с Юникодом... Однако, в силу широкого применения Юникода, эти мысли надо отмести.
Здравствуйте, Stepanov, Вы писали:
S>Прямо мысли закрадываются, что разрекламированный компилер плохо дружит с Юникодом... Однако, в силу широкого применения Юникода, эти мысли надо отмести.
М-м-м... а Вы пробовали ФАРом на внутренности экзешника смотреть? Корректные юникодные русские строки имеют довольно узнаваемый вид...
Здравствуйте, Stepanov, Вы писали:
SDB>>Хорошо, давайте еще один эксперимент — пихнуть в контрол русскую строчку из ресурсов.
S>Этот вариант РАБОТАЕТ! S>Создал строковый ресурс, в программе создал переменную типа CString, грузанул строку LoadString(). Все пучком.
Вообще-то говоря, лучше так и делать. Зашивать в код строки — это как-то не по виндовому. Но вывод однозначный — некорректное их преобразование. Кстати, а ICL вообще поддерживает #pragma setlocale()? Там у них в доке есть список прагм, которые они игнорируют.
SDB>Кстати, а вообще поддерживает #pragma setlocale()? Там у них в доке есть список прагм, которые они игнорируют.
Как оказалось не поддерживает.
The following pragmas, which sometimes appear in header files, are accepted without error but have no effect:
component
function
include_alias
inline_depth
inline_recursion
intrinsic
setlocale
Да, к вопросу о внутренностях exe-шника... Обследование показало, что все строки программы в Unicode, только... в разных вариантах кодировки! Те строки, которые хранятся в ресурсах, хранятся в "нормальном" Unicode, а те, которые в тексте программы в какой-то неправильном. В каком, я так и не понял. По крайней мере, это не Unicode, не Unicode Big Endian и не UTF-8. Однако, по структуре очень похожее на Юникод.