Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Спасибо помогло.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)