Стандартный класс «edit» позволяет создать дочернее окно, внутри которого вы можете редактировать какой-либо текст. Когда фокус ввода принадлежит дочернему окну класса «edit» (редактору текста), вы можете набирать в окне текста, перемещать курсор по окну, выделять текст внутри окна при помощи клавиш Shift и клавиш перемещения курсора, перемещать выделенный текст из окна «в почтовый ящик» (clipboard) и обратно.
Используя класс окна «edit», можно создавать как многострочные редакторы текста (оконные редакторы), так и простейшие однострочные органы управления - строки редактирования.
Как и другие органы управления , редактор текста -это дочернее окно , поэтому первый идентификатор, который надо указать в параметре «тип окна » функции CreateWindow, должен быть WS_CHILD.
Текст, отображаемый в окне редактора, может быть выровнен по левой или правой границе окна или же отцентрирован. Для этого существуют следующие флаги типов окон: ES_LEFT,ES_RIGHT, ES_CENTER.
По умолчанию редактор текста может редактировать только одну строку, и если вы хотите создать многострочный редактор, то надо использовать тип ES_MULTILINE. Чтобы иметь возможность горизонтального перемещения текста в окне, добавьте тип ES_AUTOHSCROLL.В многострочном редакторе можно использовать вертикальное перемещение текста.
Для этого существует тип окна ES_AUTOVSCROLL. По умолчанию редактор текста не имеет рамки, и чтобы не отобразить, используют тип окна WS_BORDER.
Перечислим основные типы органов управления - редактора:
ES_AUTOHSCROLL
Этот стиль вызывает автоматически горизонтальный скроллинг вправо на 10 позиций, если курсор находиться в конце строки. По нажатии клавиши ENTER осуществляется обратный скроллинг на позицию 0.
ES_AUTOVSCROLL
При нажатии клавиши ENTER в конце страницы текст автоматически сдвигается вверх на один экран.
ES_CENTER
Текст автоматически центрируется.
ES_LEFT
Выравнивание текста по левому краю (подбор).
ES_LOWERCASE
Все символы автоматически переводятся в нижний регистр (строчные).
ES_MULTILINE
Этот стиль определяет многострочный редактор текста( по умолчанию определяется простейшая строка ввода). Если указан флаг ES_AUTOVSCROLL , то в окне показывается максимально возможное количество символов, и при нажатии клавиши ENTER в конце страницы текст перемещается на один экран вверх. Если флаг ES_AUTOVSCROLL не указан, то осуществляется автоматический горизонтальный скроллинг на 10 позиций, если курсор находиться в конце строки. По нажатии клавиши ENTER осуществляется обратный скроллинг на позиции 0 (начало новой строки). Если флаг ES_AUTOHSCROLL не указан то осуществляется автоматический перенос на новую строку: при нажатии ENTER, однако, так же начинается новая строка . Граница переноса зависти от ширины окна: если окно изменяет свои размеры, текст как бы «переформатируется». Многострочные редакторы могут иметь полосы просмотра; их сообщения обрабатываются автоматически. Если у многострочного редактора нет полос прокрутки, то он обрабатывает все сообщения о прокрутке, поступающие от родительского окна.
ES_NOHIDESEL
По умолчанию окно-редактор убирает выделения при потере фокуса ввода и возвращает его при возврате фокуса ввода. Флаг ES_NOHIDESEL отменяет это свойство.
ES_OEMCONVERT
Вводимый в окно текст сначала преобразуется из таблицы ANSI в таблицу OEM, затем обратно, после чего отображается на экране. Это гарантирует правильный перевод из одной таблицы в другую, например, при указании строки редактирования имени файла DOS.
ES_PASSWORD
Этот стиль предназначен для ввода паролей и кодов: вводимые символы отображаются в виде звездочки (*). Можно отображать и другой символ, для чего следует послать Windows сообщения ЕM_SETPASSWORDCHAR.
ES_RIGHT
Выравнивание текста по правому краю.
ES_UPPERCASE
Все символы автоматически переводятся в верхний регистр(прописные).
Сообщения класса «edit»
Редактор текста передает функции родительского окна сообщение WM_COMMAND. В параметре сообщения описаны ниже:
Параметр
| Описание
|
wParam
LOWORD (lParam)
HIWORD (lParam)
| Идентификатор дочернего окна
Индекс дочернего окна
Код сообщения
|
Различные коды сообщений приведены в следующей таблице:
Код сообщения
| Описание
|
EN_CHANGE
EN_VSCROLL
EN_HSCROLL
EN_SETFOCUS
EN_KILLFOCUS
EN_ERRSPACE
| Содержимое редактора текста изменено
Нажата полоса вертикального просмотра
Нажата полоса горизонтального просмотра
Редактору текста передали фокус ввода
Редактор текста потерял фокус ввода
Произошло переполнение буфера редактора текста
|
Код сообщения EN_ERRSPACE означает, что редактору текста не хватает отведенной для него памяти . Заметим, что содержимое редактора текста ограниченно 32 килобайтами.
Редактор текста - довольно сложный объект; программа общается с ним как и с другими органами управления, посредством сообщения .
Если надо удалить , скопировать или переместить в «почтовый ящик» выделенный в настоящий момент времени участок текста, то можно предать окно редактора текста сообщение WM_CLEAR,WM_COPY,WM_CUT соответственно:
Send Message (hEditWnd,WM_CLEAR,0,0L);
Send Message ( hEditWnd, WM_COPY,0,0L);
Send Message (hEditWnd, WM_CUT,0,OL);
Текст из «почтового ящика» можно вставить в текст внутри окна редактора в месте нахождения курсора:
SendMessage (hEditWnd, EM_GETSEL,0,0L);
Выделить текст внутри окна редактора может либо пользователь при помощи клавиши Shift и клавиш перемещения курсора, либо само приложение, передав окну редактора сообщение EM_SETSEL с параметром lParam, содержащим начальную и конечную позицию выделяемого текста:
SendMessage (hEditWid,EM_SETSEL, 0,MAKELONG(wBegin,wEnd));
У многострочного редактора текста можно определить число строк:
nCount=SendMessage(hEditWnd,EM_ GETLINECOUNT,0,0L);