Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
02_Кнопки_текстовые поля.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
257 Кб
Скачать
☆

Текстовые редакторы (класс edit)

  • В Windows зарегистрирован класс окна с именем “edit”, на базе которого можно создать однострочный или многострочный текстовый редактор.

Для того чтобы после создания поместить в редактируемое поле текст, можно воспользоваться функцией SetWindowText. Для получения текста из окна редактирования используются функции GetWindowTextLength и GetWindowText.

  • Управляющие окна редактирования хранят текст в области памяти программы (в адресном пространстве программы). Содержимое управляющих полей редактирования ограничено примерно 32 килобайтами.

Рассмотрим стили окон редактирования

Текст в управляющих окнах редактирования может быть выравнен либо по правому краю, либо по правому, либо по центру. Формат можно задать с помощью стилей окна ES_LEFT, ES_RIGHT и ES_CENTER.

По умолчанию в управляющем окне редактирования имеется одна строка. Для создания такого окна с автоматической горизонтальной прокруткой следует добавить стиль ES_AUTOHSCROLL.

Приложение может создать многострочное управляющее окно редактирования, используя стиль окна ES_MULTILINE. Для многострочного окна редактирования, если не задан стиль ES_AUTOHSCROLL, то текст автоматически переносится на новую строку при достижении правого края окна.

При задании стиля ES_AUTOHSCROLL в многострочном редакторе для перехода на новую строку нужно нажимать клавише <Enter> (т.е. появляется возможность горизонтальной прокрутки). Используя стиль окна ES_AUTOVSCROLL, в многострочное окно редактирования можно включить возможность вертикальной прокрутки.

  • Если стили ES_AUTOHSCROLL и ES_AUTOVSCROLL включены в многострочные управляющие окна, то можно добавить и сами полосы прокрутки.

Добавление полос прокрутки делается путем использования тех же идентификаторов стиля окна, что и для недочерних окон: WS_HSCROLL и WS_VSCROLL.

  • Чаще всего для многострочных редакторов используется следующая комбинация стилей:

WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_BORDER|

ES_MULTILINE|ES_ AUTOHSCROLL |ES_AUTOVSCROLL |WS_HSCROLL| WS_VSCROLL

Рассмотрим, как окна редактирования уведомляют родительское окно о тех изменениях, которые с ними происходят

Поля редактирования посылают оконной процедуре родительского окна сообщения WM_COMMAND. Значения параметров сообщения wParam и lParam такие же, как и для кнопок. Ниже представлены коды уведомления управляющих окон редактирования:

  • EN_SETFOCUS – окно получило фокус ввода.

  • EN_KILLFOCUS – окно потеряло фокус ввода.

  • EN_CHANGE – содержимое окна будет меняться.

  • EN_UPDATE – содержимое окна изменилось.

  • EN_ERRSPACE – произошло переполнение буфера редактирования.

  • EN_MAXTEXT – произошло переполнение буфера редактирования при вставке.

  • EN_HSCROLL – на горизонтальной полосе прокрутки был щелчок мышью.

  • EN_VSCROLL – на вертикальной полосе прокрутки был щелчок мышью.

Для обработки сообщения от поля редактирования оконная функция родительского окна может содержать код следующего вида:

case WM_COMMAND:

{ UINT idCtl=LOWORD(wParam); // идентификатор дочер. окна

UINT code=HIWORD(wParam); // код уведомления

HWND hChild=(HWND)lParam; // дескриптор дочер. окна

if(idCtrl==ID_edit&&code==EN_CHANGE)

{

// текст поля сейчас будет меняться

. . .

}

}; return 0;

Родительские окна также могут посылать окнам редактирования сообщения

Специфических сообщений, которые родительское окно может послать окну редактирования при помощи функции SendMessage, достаточно много. Рассмотрим наиболее часто употребляемые:

  • WM_CUT - для удаления с пересылкой в буфер обмена;

  • WM_COPY - копирования в буфер обмена;

  • WM_CLEAR - очищения выделенной части текста из окна редактирования;

  • WM_PASTE - для вставки текста из буфера обмена в окно редактирования;

  • EM_GETSEL - для получения начальной и конечной позиции текущего выделения текста;

  • EM_SETSEL - для выделения некоторого участка текста;

  • EM_REPLACESEL - для замены текущего выделенного текста другим текстом;

  • EM_GETLINECOUNT - для получения число строк многострочного редактора;

  • EM_LINEINDEX - для получения смещения от начала буфера до некоторой строки;

  • EM_LINELENGTH - для получения длины некоторой строки;

  • EM_GETLINE - для копирования некоторой строки в буфер программы.