Клас 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-уазатель на компонент.


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*