Visual C и Unicode
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
у меня хранится строка типа wchar_t (или TCHAR, CSTRINGT).
Мне нужно выводить эту строку в EditBox и ListBox - КАК ЭТО СДЕЛАТЬ?
Все стандартные функции имеют в качестве параметра только LPCSTR, и хранят символы ANSI. Рыскал в MSDN'e но там по теме вывода Unicode в эллементы управления диалогового окна ничего не сказано.
помогите.
Мне нужно выводить эту строку в EditBox и ListBox - КАК ЭТО СДЕЛАТЬ?
Все стандартные функции имеют в качестве параметра только LPCSTR, и хранят символы ANSI. Рыскал в MSDN'e но там по теме вывода Unicode в эллементы управления диалогового окна ничего не сказано.
помогите.
ОС какая? Если NT/200x/XP, то поддержка Unicode там имеется для всех стандартных контролов. Тип строковых параметров для них не LPCSTR, а LPCTSTR, читай внимательнее. Чтобы использовать Unicode, добавь в свойствах проекта Preprocessor definitions два макроса: UNICODE, _UNICODE.
Если все-таки нужно конвертировать, см. WideCharToMultiByte.
Если все-таки нужно конвертировать, см. WideCharToMultiByte.
Можно даже текст не конвертировать и не не предопределять UNICODE, а напрямую вызывать юникодные функции, типа SetWindowTextW() или SetDlgItemTextW() и передавать им текст в формате юникода. Но это лучше в том случае, когда вся программа работает с текстом в формате ANSI, а только отдельные фрагменты программы используют текст UNICODE. А если основная часть программы использует UNICODE, то лучше его предопределить в параметрах компилятора.
Спасибо что откликнулись,
WinMain это вариант не подходит, потомучто у меня вся работа должна осществляться в Unicode, данные я беру из файла, а у всех этих функции в качестве параметра указатель на строку ANSI.
Eugie
#define UNICODE
вызывает ошибку.
И надо сделать совместимость с 9х/МЕ виндой.
Есть еще какие-нить варианты?
WinMain это вариант не подходит, потомучто у меня вся работа должна осществляться в Unicode, данные я беру из файла, а у всех этих функции в качестве параметра указатель на строку ANSI.
Eugie
#define UNICODE
вызывает ошибку.
И надо сделать совместимость с 9х/МЕ виндой.
Есть еще какие-нить варианты?
Я тут прочитал сои сообщения и сам ниче не понял
)
Мне ниче конвертировать не надо..
мне просто нужен пример вывода строки типа wchar_t или CStringW или CStringT в (к примеру) в EditBox.
Вариант Eugie еще не пробовал.

Мне ниче конвертировать не надо..
мне просто нужен пример вывода строки типа wchar_t или CStringW или CStringT в (к примеру) в EditBox.
Вариант Eugie еще не пробовал.
Мужчина должен уметь делать все, кроме как рожать детей и трахаться в задницу.
Если используешь MFC, можно сделать совсем просто:
Подразумевается, что само приложение - не-UNICODE, т.е. макросы UNICODE и _UNICODE не определены. Класс CString внутри хранит данные как TCHAR, т.е. если определен _UNICODE - как wchat_t, иначе как char; у CString есть конструктор CString(LPWSTR), он и будет использован в данном случае.
Код: Выделить всё
wchar_t ws[] = L"Какая-то Юникод-строка";
CString str(ws);
m_MyEdit.SetWindowText(str);
Это конечно все хорошо,
а что есть мне надо из Edita считать. Я когда печатаю в Edit юникодовски символы - сразу появляются вопросительные знаки - шо с этим делть?
а что есть мне надо из Edita считать. Я когда печатаю в Edit юникодовски символы - сразу появляются вопросительные знаки - шо с этим делть?
а что есть мне надо из Edita считать
Код: Выделить всё
CString str;
m_MyEdit.GetWindowText(str);
Что, прям так сразу при вводе вопросы появляются?когда печатаю в Edit юникодовски символы - сразу появляются вопросительные знаки
в том то все и дело, когда вводишь символы сразу и появляются вопросительные знаки (к примеру румынский, французкий символы не из стандартного аолфавита). Как считывать или выводить обычную строку в Edit, я знаю.
Честно говоря проблема это довольно серьозная, тут у двух программеров уже мозги закипают в течении месяца. Бьемся и безтолку.
При объяввлении #define UNICODE выскакивают ошибки.
Честно говоря проблема это довольно серьозная, тут у двух программеров уже мозги закипают в течении месяца. Бьемся и безтолку.
При объяввлении #define UNICODE выскакивают ошибки.
в общем народ - я допер! если кому интересно можете почитать:
делается все просто: в фалй stdafx.h пишется строка #define _UNICODE (может и в других файлах тоже можно... не пробовал, но скорее всгео да).
Эт оеще не все. теперь открываем Project properties
закладка Linker->advanced.
и в поле Entry Point пишем следующую строку: wWinMainCRTStartup.
после этого все работает, правда с нормальными строками, однобайтовыми, теперь трудно работать.
делается все просто: в фалй stdafx.h пишется строка #define _UNICODE (может и в других файлах тоже можно... не пробовал, но скорее всгео да).
Эт оеще не все. теперь открываем Project properties
закладка Linker->advanced.
и в поле Entry Point пишем следующую строку: wWinMainCRTStartup.
после этого все работает, правда с нормальными строками, однобайтовыми, теперь трудно работать.