Про EDITTEXT...
От: Liza  
Дата: 26.05.03 20:10
Оценка:
Есть у меня стандартный элемент управления Edit. Я могу изменять текст в нем вызывая функцию SetDlgItemText(....). А могу ли я добавить новый текст к уже существующему?
То есть писать текст в окне таким образом
....
MyWriteLn("Hello World!");
MyWriteLn("I am lamer!");
....
и строчки выводились бы последовательно.
Может такую вещь можно реализовать, используя другой стандартный элемент управления?
Re: Про EDITTEXT...
От: FlashBack  
Дата: 26.05.03 20:27
Оценка:
Может так?

char temp[255];

SetDlgItemText(hDlg,nItem,"Hello World!");


GetDlgItemText(hDlg,nItem,temp,255);

strcat(temp,"I am lamer!");
SetDlgItemText(hDlg,nItem,temp);
Re[2]: Про EDITTEXT...
От: Аноним  
Дата: 26.05.03 20:40
Оценка:
Здравствуйте, FlashBack, Вы писали:

FB>Может так?


FB>
FB>char temp[255];

FB>SetDlgItemText(hDlg,nItem,"Hello World!");


FB>GetDlgItemText(hDlg,nItem,temp,255);

FB>strcat(temp,"I am lamer!");
FB>SetDlgItemText(hDlg,nItem,temp);

FB>


Так не интересно !
Хочется, чтобы при этом все держалось в буфере самого EDITTEXT'а. Кроме того таким способом не напечатать символ '\n'.
Re: Про EDITTEXT...
От: valytch Беларусь  
Дата: 26.05.03 22:14
Оценка:
Здравствуйте, Liza, Вы писали:

L>Есть у меня стандартный элемент управления Edit.

[skip]
L>и строчки выводились бы последовательно.
L>Может такую вещь можно реализовать, используя другой стандартный элемент управления?
^^^^ и даже лёхка...

Если не предполагается изменять текст в ручную,
то можно использовать ListBox. В контексте MFC это
будет выглядеть так:

CListBox clListBox;
...
clListBox.AddLine("Line1");
clListBox.AddLine("Line2");

При этом в ListBox-е будет:

Line1
Line2
Re: Про EDITTEXT...
От: valytch Беларусь  
Дата: 26.05.03 23:19
Оценка:
Здравствуйте, Liza, Вы писали:

L>Есть у меня стандартный элемент управления Edit.

[утеряно]
L>А могу ли я добавить новый текст к уже существующему?
[утеряно]

Я тут справился в литературе... На API ListBox реализуется так:

// Получаем hwnd ListBox-а (его ID — IDL_SOFTBALL)
hwndList = GetDlgItem(hDlg, <ID listbox-a>);
// Добавить строку
SendMessage(hwndList, LB_ADDSTRING, 0, <указатель на строку>);
// Удалить строку
SendMessage(hwndList, LB_DELETESTRING, <номер строки>, 0);
... << RSDN@Home 1.0 beta 7a >>
Re: Про EDITTEXT...
От: Алексей Владимирович Миронов Россия  
Дата: 27.05.03 00:23
Оценка: 5 (2)
Здравствуйте, Liza, Вы писали:

L>Есть у меня стандартный элемент управления Edit. Я могу изменять текст в нем вызывая функцию SetDlgItemText(....). А могу ли я добавить новый текст к уже существующему?


Я делал это примерно так:

DWORD txtlen = (DWORD)GetWindowTextLength (hedit);
SendMessage ( hedit, EM_SETSEL, txtlen, txtlen );
SendMessage ( hedit, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)"Добавка" ); 
/* FALSE отключает UNDO => ускоряет вывод и экономит память */


У этого метода есть минус -- теряется текущая позиция курсора. Нужно либо сохранять и восстанавливать ее, либо махнуть на нее рукой.
Re[2]: Вот еще проблема....
От: Liza  
Дата: 27.05.03 00:41
Оценка:
Здравствуйте, Алексей Владимирович Вы писали:

АВМ>
АВМ>DWORD txtlen = (DWORD)GetWindowTextLength (hedit);
АВМ>SendMessage ( hedit, EM_SETSEL, txtlen, txtlen );
АВМ>SendMessage ( hedit, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)"Добавка" ); 
АВМ>/* FALSE отключает UNDO => ускоряет вывод и экономит память */
АВМ>


Спасибо.

ABM> ....либо махнуть на нее рукой....


Вот еще проблема: когда я пытаюсь вывести на экран строчку типа "Hello World!\nHello!",
вместо перевода строки в окошке рисуется квадратик
Re[3]: Вот еще проблема....
От: Алексей Владимирович Миронов Россия  
Дата: 27.05.03 00:51
Оценка:
Здравствуйте, Liza, Вы писали:

L>Вот еще проблема: когда я пытаюсь вывести на экран строчку типа "Hello World!\nHello!",

L>вместо перевода строки в окошке рисуется квадратик

Во-первых, надо "Hello\r\nWorld!". Во-вторых, должен быть установлен стиль ES_MULTILINE.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.