| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > CListBox.GetText и русский язык |
| Автор: alex6077582 16.9.2010, 12:30 |
| В программе пользователь заполняет данными Лист бокс, вводит в Едит Текст строку и нажимает ОК. Строка копируется с Едита и добавляется в Лист бокс при помощи функции: m_Edit.GetWindowText(m_String); m_ListBox.AddString( m_String); Затем пользователь сохраняет данные в тхт файл. m_ListBox.GetText(index, TempString); m_File.WriteString(TempString); и тут проблемма: В программе используется Юникод и метод - m_LsitBox.GetText(index, TempString); в строку TempString ничего не копирует если использовался русский текст, а если Английский, то всё работает нормально. Подскажите пожалуйста как решить эту проблемму. Зарание благодарен. Добавлено через 2 минуты и 19 секунд И ещё. У меня Windows 7 and Visual Studio 2008. |
| Автор: Albor 16.9.2010, 13:32 |
| Какой тип у TempString? Хотя, если строки добавляются в листбокс, то должны и читаться от туда. А что возвращает m_ListBox.GetText()? |
| Автор: alex6077582 16.9.2010, 15:57 |
| TempString это обьект класса CString но я немного розобрался. Функция m_ListBox.GetText(index, TempString) работает нормально и нормально сохраняет русский текст в TempString, оказывается проблемма в другом(при отладке я не внимательно проверил) . CString tempStr; CStdioFile fileSave(m_szPathName, CFile::modeCreate | CFile::modeWrite | CFile::typeText);\\обьект для сохранения тхт файла for(int i = 0; i < m_ListBox.GetCount(); i++) { m_ListBox.GetText(i, tempStr); \\берём строку из ListBox по индексу i и она правильно сохраняется в tempStr tempStr += _T("\n"); \\добовляем к строке эскейп последовательность fileSave.WriteString(tempStr); \\ и тут проблемма если в tempStr английский текст, то всё нормально, а если русский то в файл тупо ничего не пишится, как буддто компилятор игнориррует этот оператор. |
| Автор: Albor 16.9.2010, 17:48 |
| Создавай файл с флагом CFile::typeBinary, а перевод строки делай так tempStr += _T("\r\n"); |
| Автор: alex6077582 16.9.2010, 17:51 |
| Так и хотел попробовать! чуть позже проверю, напишу |
| Автор: alex6077582 16.9.2010, 18:49 |
| Спасибо помогло. |