Как программно добавить текст в Edit Control
В основном, приложения Windows используютс элемент
управления редактирования для отображения
текста. Иногда, приложению требуется добавить
текст в конец окна редактирования вместо того,
чтобы заменить весь текст. Существует два
способа сделать это в Windows:
- Использовать сообщения EM_SETSEL и EM_REPLACESEL.
- Использовать сообщение EM_SETSEL совместно с
функциями буфера обмена для добавления текста в
конец бефера окна редактирования.
Обратите внимание: Так как параметры сообщения
EM_SETSEL различаются между 32-битной и 16-битной
версиями, то ниже приведённый код использует Win32
макрос, чтобы определить во время компиляции
какое это приложение - 16- или 32- битное.
Сообщение EM_SETSEL можно использовать для помещения
выделенного диапазона текста в окно
редактирования. Если начальная и конечная
позиции диапазона совпадают, то выделение не
сделано и курсор будет перемещён в эту позицию.
Чтобы поместить курсор в конец текста окна
редактирования и установить фокус на окно
редактирования, проделайте следующее:
HWND hEdit = GetDlgItem (hDlg, ID_EDIT);
int ndx = GetWindowTextLength (hEdit);
SetFocus (hEdit);
#ifdef WIN32
SendMessage (hEdit, EM_SETSEL, (WPARAM)ndx, (LPARAM)ndx);
#else
SendMessage (hEdit, EM_SETSEL, 0, MAKELONG (ndx, ndx));
#endif
Как только каретка помещена в конец окошка
редактирования, Вы можете использовать EM_REPLACESEL,
чтобы добавить в него текст. Приложение посылает
сообщение EM_REPLACESEL для замены текущего
выделенного фрагмента в окне редактирования
указывая текст в параметре lpszReplace (lParam). Так как
текущего выделения нет, то заменяемый тект
вставляется в текущее положение каретки.
Следующий пример устанавливает выделение на
конец окна редактирования и вставляет текст в
буфер:
#ifdef WIN32
SendMessage (hEdit, EM_SETSEL, (WPARAM)ndx, (LPARAM)ndx);
#else
SendMessage (hEdit, EM_SETSEL, 0, MAKELONG (ndx, ndx));
#endif
SendMessage (hEdit, EM_REPLACESEL, 0, (LPARAM) ((LPSTR) szBuffer));
Другой способ вставить текст в окошко
редактирования заключается в том, чтобы
использовать буфер обмена (clipboard). Если
приложение будет работать через буфер обмена, то
достаточно просто скопировать туда текст, а
потом послеть сообщение WM_PASTE в окошко
редактирования для добавления текста.
Естевтсвенно, что все данные, которые были в
буфере обмена будут потеряны.
Перед тем, как послать сообщение WM_PASTE, необходимо
установить каретку на конец окна ректирования
при помощи сообщения EM_SETSEL. Ниже приведён "псевдо"
код, который показывает, как реализовать этот
метод:
OpenClipBoard () ;
EmptyClipBoard() ;
SetClipBoardData() ;
#ifdef WIN32
SendMessage (hEdit, EM_SETSEL, (WPARAM)ndx, (LPARAM)ndx);
#else
SendMessage (hEdit, EM_SETSEL, 0, MAKELONG (ndx, ndx));
#endif
SendMessage (hEdit, WM_PASTE, 0, 0L);
Не забудьте, что код в буфере обмена должен быть
в CF_TEXT формате.
|