Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

Как программно добавить текст в 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 формате.

 



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS