Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Новая строка в Edit

47K
14 июля 2009 года
Sashok123
18 / / 01.07.2009
В FAQ написано что для создания строки надо использовать "\r\n"
SetDlgItemText(hMainDlg, IDC_EDIT1,"tratata\r\ntyrpyr");
- для константных данных такая процедура работает правильно:
tratata
tyrpyr
Если же я передаю третьим параметром указатель на массив char, то edit мне выдает tratata\r\ntyrpyr, как же мне отобразить текст содержащий переносы на новую строку?
288
14 июля 2009 года
nikitozz
1.2K / / 09.03.2007
Код в студию.
Вот это работает нормально
 
Код:
char szText[32] = {0};
strcpy(szText, "Hello\r\nWorld");
::SetDlgItemText(m_hWnd, IDC_EDIT1, szText);
47K
14 июля 2009 года
Sashok123
18 / / 01.07.2009
Проблема немного в другом, я копирую строки из однострочного эдита в многострочный, а не задаю констатную строку вроде char* str = "тратата\r\n". Приложение должно работать как консоль: есть один однострочный эдит и один многострочный. многострочный эдит доступен только для чтения. После ввода в однострочный эдит (нажали enter), из однострочного эдита строка читается в некий длинный буфер Text, добавляется знак переноса \r\n, однострочный этит очищается, а в многострочный передается этот длинный буфер Text.
Так вот, буфер содержит данные такого формата: "Hello\r\nWorld\r\ntrampampan\r\nитд");
где знаками \r\n разделены строки, прочитанные из однострочного эдита.
Так вот SetDlgItemText(hMainDlg, IDC_EDIT1, Text); выдает Hello\r\nWorld\r\ntrampampan\r\nитд, в то время как если я пишу
char* Text = "Hello\r\nWorld\r\ntrampampan\r\nитд"
SetDlgItemText(hMainDlg, IDC_EDIT1, Text);
Все работает правильно, выводятся 4 строки.
47K
14 июля 2009 года
Sashok123
18 / / 01.07.2009
щас попробую strcpy
47K
14 июля 2009 года
Sashok123
18 / / 01.07.2009
Раньше \r\n вставлял присваивая ASCII коды \, r, \, n последовательно
Сейчас после каждой скопированной строки делаю так:
strcpy(Text+CurrentPos,"\r\n");
После каждой строки этой командой вставляется код 13, насколько я понял это код enter. Но теперь все строки выводятся слитно tratatatyrpyr, код 13 вообще никак не ощущается.
288
14 июля 2009 года
nikitozz
1.2K / / 09.03.2007
Все же приведите исходный код.
Никак ни возьму в толк, как у вас вышло Hello\r\nWorld.
Даже если сделать Edit однострочным все равно выйдет так Helloздесь два квадратаWorld.

strcpy и константность здесь роли не играет. Почему-то у меня подозрения что в коде есть что-то вроде этого
 
Код:
strcat(....., "\\r\\n")

P.S. уверены что CurrentPos определяется верно?
47K
14 июля 2009 года
Sashok123
18 / / 01.07.2009
int n = GetDlgItemText(hMainDlg, IDC_EDIT1, Text+CurrentPos, 256);
CurrentPos += n;
strcpy(Text+CurrentPos,"\r\n"); //здесь поместился код 13
CurrentPos+=1; // поэтому +1
SetDlgItemText(hMainDlg, IDC_EDIT2,Text);

Все заработало когда немного поправил
int n = GetDlgItemText(hMainDlg, IDC_EDIT1, Text+CurrentPos, 256);
CurrentPos += n;
strcpy(Text+CurrentPos,"\r\n"); //Там оказывается после кода 13 еще идет
CurrentPos+=2; //код 10, а я его затирал
SetDlgItemText(hMainDlg, IDC_EDIT2,Text);

/////////////////////////
А вначале действительно было что-то вроде strcat(....., "\\r\\n"), потому что я \r\n получал заполнением кодами:
Text[CurrentPos] = 92;
CurrentPos++;
Text[CurrentPos] = 114;
CurrentPos++;
Text[CurrentPos] = 92;
CurrentPos++;
Text[CurrentPos] = 110;
CurrentPos++;
Text[CurrentPos] = 0;
А это неправильно

Все заработало правильно, спасибо
47K
14 июля 2009 года
Sashok123
18 / / 01.07.2009
Значит когда я пишу char* str = "\r\n" в результате я получаю массив из трех элементов 13 и 10 и 0. А в эдите для перехода на новую строку необходимо последовательное расположение 13 и 10.
Просто не знал, что "\r" и "\n" преобразуются в коды, думал, что все представляется как есть, теперь ясно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог