InfoCity
InfoCity - виртуальный город компьютерной документации
Реклама на сайте



Смотрите информацию shindo на сайте.



Размещение сквозной ссылки

 

Класс EDIT


Содержание


О классе EDIT
Текстовой буфер
Изменение отображения
Выделенный текст
Операции над строками компонента
Сообщения получаемые приложением от компонента класса EDIT
Сообщения посылаемые приложением компоненту класса EDIT, для извлечения информации

О классе EDIT


Представляет собой окошко для ввода пользователем какой-нибудь строки. Встроена возможность использования буфера обмена (вставка, удаление, компирование и т. д.) Родительское окно компонента с таким классом может получать сообщение WM_COMMAND, параметры которого несут в себе другие "под-сообщения" (о них попозже). Естественно, что сообщение посылается функциями SendMessage, для посылки сообщений "нормальному" окну, и SendDlgItemMessage, для посылки диалоговому окну от окна-родителя.
Компонент класса EDIT может быть как однострочным, так и многострочным, всё зависит от стилей, которые вы задаете в функциях CreateWindow или CreateWindowEx. Чтобы сделать возможность работы с многострочным текстом нужно использовать стиль ES_MULTILINE, где вы можете контролировать выравнивание текста стилями ES_LEFT, ES_CENTER, и ES_RIGHT.

Текстовой буфер


Когда ОС создает элемент EDIT, она автоматом создает текстовый буфер подключенный к этому элементу.Размер буфера устанавливается в 32 KB? Эта же цифра является максимально допустимым размером для однострочного элемента класса EDIT. Для многострочного-64KB Размер буфера может быть изменен (непревышая максимально допустимые значения), для этого следует послать компоненту класса EDIT сообщение EM_SETLIMITTEXT-установить размер буфера и EM_GETLIMITTEXT- чтобы получить текущий размер. Но ОС может сама вам сообщить о переполнение буфера, она посылает вашему приложению сообщение WM_COMMAND, где старший байт wParam содержит сообщение EN_ERRSPACE, а младший байт содержит индентификатор (Внимание не указатель!!!). Указатель на компонент класса EDIT содержится в lParam.
Так как буфер распологается по некоторому адресу, то, естественно, этот адрес можно узнать. Для этого пошлем компоненту класса EDIT сообщение EM_GETHANDLE (только NT!!!). Для того, чтобы установить буфер используйте EM_SETHANDLE(только NT!!!), только перед этим создайте указаель на область памяти с помощью функции LocalAlloc(). Когда вы посылайте компоненту класса EDIT сообщение EM_SETHANDLE, все линии в нем стираются.
Windows позволяет сделать компонент класса EDIT недоступнум для изменения текста в нем. Для этого она ставит флаг только чтение. Чтобы сделать это программно, нужно послать компоненту сообщение EM_SETREADONLY.

Изменение отображения


Windows позволяет изменить превычный режим отображения этого компонента, это делается посылкой ему трех сообщений:EM_SETRECT- устанавливает новое изображение (здесь используется структура RECT, о создании которой программист должен заранее позаботиться), EM_GETRECT-возвращает текущий режим, EM_SETRECTNP-устанавливает без перерисовки.

Выделенный текст


Программист может узнать какой текст выделен в данный момент в компоненте. Опять же, для этого нужно всего лишь послать ему соответствующеи сообщения: EM_GETSEL-возвращает начальную и конечную позиции выделенного, EM_GETSEL -устанавливает начальную и конечную позиции выделенного, EM_REPLACESEL-заменяет выделенный тест. Так же программист может программным путем вырезать, копировать или вставить текст, используя следующие сообщения:WM_COPY(копировать), WM_CUT (вырезать), WM_PASTE (вставить) и WM_CLEAR (очистка). так же к этому компоненту привязаны флаги, отвечающие за изменения текста в нем. Чтобы узнать состояния флагов, нужно послать компоненту сообщение EM_GETMODIFY, чтоб изменить - EM_SETMODIFY

Операции над строками компонента


Естественно, что в большенстве случаев компонент класса EDIT создается с целью предоставления пользователью возможности ввода и редактирования текста. Но по совершению какого-либо действия этот тест надо будет получить. Здесь как раз я и хотел бы рассмотреть сообщения, посылая которые программист может получать информацию о тексте.

Длина строки


WM_GETTEXTLENGTH - сообщение, посылаемое компоненту, когда нужно получить длину всего текста (не определенной строки!!!!). Если компонент класса EDITсоздавался многострочным, то это сообщение вернет количество символов во всем многострочном тексте (включая символы перевода каретки (это последовательность байт #13#10 по ASCII))
EM_LINELENGTH-возвращает количество символов в определенной!!! строке без учета символов перевода каретки.

Получение строки


Для этого так же существует три способа:
EM_GETFIRSTVISIBLELINE -Выводит индекс первой видимой строки.
EM_GETLINE-выводит строку с индексом (первая строка имеет индекс 0).
WM_GETTEXT-возвращает многострочный текст!!!

Остальные функции


Для того, чтобы использовать EM_GETLINE в цикле, нужно узнать количество строк, что делается с помощью сообщения EM_GETLINECOUNT. Для получения индекса определенной строки используйте сообщение EM_LINEINDEX. Чтобы найти строку с определенным символом посылайте компоненту EM_LINEFROMCHAR. Другие, менее значимые сообщения вы можете посмотреть тут.

Сообщения от класса EDIT


Здесь описаны сообщения, которые посылаются вашему приложению, когда с компонентом класса EDIT происходят какие-либо действия. Хочу заметить, что эти сообщения присылаются не в явном виде (например ка WM_CLOSE), а являются параметром сообщения WM_COMMAND, поэтому, чтобы обработать такое сообщение, нужно: 1) принять сообщение WM_COMMAND
2)В старшем слове wParam содержится индекс сообщения (здесь я привожу константы, которые этот индекс заменяют)
3) Далее смотри содержание остальных слов параметров lParam и wParam.

EN_CHANGE

Пользователь изменил текст. Windows обновляет экран, перед тем, как послать это сообщение. Младшее слово wParam-число (индентификатор) компонента в диалоговом окне(только!!!). lParam-уазатель на компонент.

EN_ERRSPACE

Был установлен предел буфера, и этот предел превышен. (По умолчанию предел - 65535 для многострочных). Младшее слово wParam-число (индентификатор) компонента в диалоговом окне(только!!!). lParam-уазатель на компонент.

EN_KILLFOCUS

Пользователь переключился на другой компонент. Младшее слово wParam-число (индентификатор) компонента в диалоговом окне(только!!!). lParam-уазатель на компонент.

EN_HSCROLL

Пользователь прокрутил горизонтальную полосу прокрутки. Windows обновляет экран, после того, как послало это сообщение. Младшее слово wParam-число (индентификатор) компонента в диалоговом окне(только!!!). lParam-уазатель на компонент.

EN_MAXTEXT

Это сообщение посылается, когда пользователь вставил или ввел текст, и длина текста превышает максимально допустимую. Это сообщение так же посылается, когда текст вышел за границы видимости, а свойства ES_AUTOHSCROLL и ES_AUTOHSCROLL, отвечающие за прокрутку, не установлены. Младшее слово wParam-число (индентификатор) компонента в диалоговом окне(только!!!). lParam-уазатель на компонент.

EN_SETFOCUS

Пользователь установил фокус на компонент. Младшее слово wParam-число (индентификатор) компонента в диалоговом окне(только!!!). lParam-уазатель на компонент.

EN_UPDATE

Пользователь изменил текст. Windows посылает сообщение после того, как отформатирует текст, но перед тем, как обновить экран. Младшее слово wParam-число (индентификатор) компонента в диалоговом окне(только!!!). lParam-уазатель на компонент.

EN_VSCROLL

Пользователь прокрутил вертикальную полосу прокрутки. Windows обновляет экран, после того, как послало это сообщение. Младшее слово wParam-число (индентификатор) компонента в диалоговом окне(только!!!). lParam-уазатель на компонент.


Реклама на InfoCity

Яндекс цитирования



Финансы: форекс для тебя








1999-2009 © InfoCity.kiev.ua