| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > UNICODE текст в Edit-боксах |
| Автор: alya 2.11.2007, 17:41 |
| Люди, не ругайте меня пожалуйста! Разбиралась с вопросом, долго разбиралась, пришла к точной постоновке задачи и больше нет сил искать в нете... надо срочно. Ответьте, если знаете. MFC-приложение, студия 2005. Character set проекта - Use Multi-Byte Character Set и должен быть такой. Вопрос: возможно ли в таком проекте работать с Edit-боксом и вводить/выводить из него UNICODE текст? Какого типа переменную к нему привязать? (дальше я этот текст буду конвертить в UTF-8). Спасибо за внимание. |
| Автор: Andrey44 2.11.2007, 18:01 |
| CString |
| Автор: alya 2.11.2007, 18:19 |
| Andrey44, это вы ответили на вопрос, какого типа переменную привязывать к Edit-боксу? Привязываю. Вычитываю текст из контрола. И выходит что я получила набор символов ASCII, а мне нужно получить набор символов по кодовой странице 1251. Я поняла, что получила не то, что надо, таким образом: посмотрела код символа 'Я', он равен -33. Это неверно. В кодовой таблице CP1251 он равен 223, а по кодовой таблице Unicode ее номер 1073. |
| Автор: Andrey44 2.11.2007, 18:24 |
| alya, покажите пожалуйста код , как вы считываете и как потом смотрите что у вас в переменной |
| Автор: alya 2.11.2007, 18:30 | ||
вот код, как я смотрела что значение в CString в кодовой странице АСКИ:
в отладчике вижу, что с = -33 для буквы Я, c = 70 для буквы F |
| Автор: Andrey44 2.11.2007, 18:37 |
| Сделайте SetWindowText(m_str); Да кстати в юникоде надо использовать TCHAR вместо char |
| Автор: alya 2.11.2007, 18:42 | ||||
Мне надо вычитывать оттуда данные - это на первом месте. А потом работать как с wchar.
спасибо, узнала |
| Автор: zkv 2.11.2007, 18:43 |
| alya, боюсь нерешаема ваша проблема. Все упирается в подгружаемые библиотеки, можно подгрузить либо ту, либо иную версию (юникод/аски), работать одновременно не получится думаю. Но 100% не уверен, подождите, может кто-нибудь другое мнение имеет на этот счет. |
| Автор: Andrey44 2.11.2007, 18:44 |
| Ну так в m_str у вас и есть все данные |
| Автор: alya 2.11.2007, 18:47 |
| zkv, спасибо... Andrey44, да, есть, но они же в АСКИ... |
| Автор: zkv 2.11.2007, 18:50 |
не совсем верно, правильно юзать WCHAR (так как проект MultiByte, то TCHAR будет транслироваться как char) подробнее http://forum.vingrad.ru/faq/topic-173734.html |
| Автор: zkv 3.11.2007, 13:40 |
| Rapalex, я посмотрел насчет возможности привязки через DDX - не получилось, а GetWindowText и попробовать не догадался. Посмотрел, оба варианта (Unicode и MultiByte) в User32.Lib имеются, будем знать. alya, извини за дезинформацию |
| Автор: alya 5.11.2007, 11:21 | ||||
Rapalex, спасибо! я единственное только заменила
на
и так же во втором случае и всё отлично работает! zkv, я тоже пробовала связать с помощью механизма DDX, но вот странно... в прототипе функции DDX_Text есть тип для привязываемой переменной LPTSTR. Если им воспользоваться, то компилятор говорит ошибка. Ребята! Большое спасибо за помощь!!! |
| Автор: Rapalex 5.11.2007, 11:37 |
Ну да просто ты собираеш не уникодовское приложение следовательно LPTSTR у тебя это массив CHAR а не WCHAR как тебе надо. Просто каркас написан так чтобы было удобно работать либо в уникоде либо без него. А тебе понадобилось нестандартная работа, это можно просто не стандартными средствами. |