Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Редактор тексту






Створення редактора. На базі класу з ім’ям EDIT створюють однорядковий чи багаторядковий редактор тексту. Його використовують для введення значень рядкових та числових змінних, а також для створення та редагування текстових файлів. Цей редактор вміє виконувати функції виділення тексту, працювати з буфером обміну Clipboard та багато іншого.

Для створення редактора викликають функцію CreateWindow. Першим аргументом вказують ім’я класу EDIT.

Крім звичайних стилів вікна, для текстового редактора вказують стилі з символічними іменами з префіксом ES_ (табл.3.1). Вони впливають на зовнішній вигляд редактора та виконувані ним функції.

 

Таблиця 3.1. Список стилів текстового редактора

Стиль Призначення
   
ES_AUTO HSCROLL Автоматично зсувати текст на 10 символів ліворуч при досягненні правої границі вікна введення. В багаторядковому редакторі для переходу на початок наступного рядка потрібно натиснути Enter
ES_AUTO VSCROLL Автоматично зсувати текст на одну сторінку вгору при натисканні клавіші Enter на останньому рядку
ES_CENTER Центрувати рядки по горизонталі
ES_LEFT Вирівнювати текст по лівому краю
ES_LOWERCASE Перетворювати символи, якы вводяться, в рядкові
ES_READ ONLY Заборона редагування тексту у вікні редагування
ES_UPPER CASE Перетворити символи, що вводяться, в заголовочні
   
ES_NOHI DIESEL При втраті фокусу введення виділений у вікні фрагмент тексту відображати в інвесрному кольорі.Якщо цей стиль не вказано, виділення фрагменту зникає до повернення фокусу введення
ES_NUM BER Дозволити введення лише цифр
ES_PASS WORD Відображати зірочку (*) для кожного символу, що вводиться
ES_RIGHT Вирівнювати текст по правому краю вікна
ES_WANT RETURN При натисканні на клавішу Enter перейти на початок наступного рядка. Інакше в діалогових вікнах натискання клавіші Enter сприймається як натискання кнопки за замовчуванням. Стиль використовується в комбінації зі стилем ES_MULTILINE і лише в діалогових панелях

 

Приклад створення редактора тексту:

#define ID_EDIT 2222

HWND hEdit=CreateWindow(: EDIT", " Початковий текст",

WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT,

30, 30, 300, 30, hwnd, (HMENU) ID_EDIT, hInstance, NULL);

Другий аргумент тут передає рядкову константу “Початковий текст”. Цей рядок буде відображено у вікні редактора одразу після його створення. Але цей аргумент частіше вказує на NULL.

Стиль вікна редактора містить конcтанту WS_BORDER. Тому навколо вікна редактора буде намальовано рамку. Константа ES_LEFT встановлює режим вирівнювання вмісту редактора по лівому краю. Ця ж константа визначає, що потрібно створити однорядковий редактор. Інші аргументи функції CreateWindow в цьому прикладі такі ж, як і для інших органів управління.

Повідомлення. Повідомлення функції вікна редактора надсилають за допомогою функції SendMessage.

. Функція вікна редактора тексту надсилає функції батьківскього вікна повідомлення WM_COMMAND. При цьому молодше слово параметра wParam мітсить ідентифікатор, а параметр lParam містить дескриптор вікна редактора тексту. Старше слово параметру wParam містить код сповіщення про здійснену дію.

Додатки оброляють принаймні сповіщення з кодом EN_ERRSPACE.

Приклад роботи з однорядковим редактором.

Задача. Створити однорядковий редактор тексту та кнопку. При натисканні на кнопку вивести вікно повідомлень з текстом, який міститься у вікна редактора.

Розв‘язок.

#include Functions.h

#define ID_EDIT 1001

#define ID_BUTTON 1002

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE hInstance;

char szClassName[]=" EditClass";

char szTitle[]=" Приклад";

INT WINAPI WinMain (HINSTANCE hInst, HINSTANCE, PSTR, INT nCmdShow)

{MSG msg; HWND hwnd; hInstance=hInst;

if(! RegClass(WndProc, szClassNameCOLOR_WINDOW)) return FALSE;

if(! (hwnd=CreateWindow(szClassName, szTitle,

WS_OVERLAPPEDWINDOW|WS_VISIBLE, 100, 50,

364, 150, 0, 0, hInst, NULL))) return FALSE;

while (GetMessage(& msg, NULL, 0, 0))

{TranslateMessage(& msg); DispatchMessage(& msg); }

return msg.wParam; }

LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{ static HWND hEdit, hButton, hStatic;

switch (msg)

{ case WM_CREATE:

{ hStatic=CreateWindow(" STATIC",

" Введіть рядок і натисніть кнопку",

WS_CHILD|WS_VISIBLE|SS_CENTER,

30, 10, 300, 20, hwnd, (HMENU)0, hInstance, NULL);

hEdit=CreateWindow(" EDIT", NULL,

WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT,

30, 40, 300, 30, hwnd, (HMENU)ID_EDIT, hInstance, NULL);

SendMessage(hEdit, EM_LIMITTEXT, 15, 0L);

hButton=CreateWindow(" BUTTON", " OK",

WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,

130, 85, 100, 30, hwnd, (HMENU)ID_BUTTON, hInstance, NULL);

SetFocus(hEdit); return 0; }

case WM_COMMAND:

{ switch (LOWORD (wParam))

{ case ID_EDIT:

{ if (HIWORD(wParam))==EN_ERRSPACE)

MessageBox(hwnd, " Мало пам'яті", szTitle, MB_OK);

return 0; }

case ID_BUTTON:

{ char chBuff[16];

SendMessage(hEdit, EM_GETLINE, 0, (LPARAM)chBuff);

MessageBox(hwnd, chBuff, szTitle, MB_OK);

SetWindowText(hEdit, " \0"); SetFocus(hEdit);

return 0; }

} return 0; }

case WM_DESTROY: {PostQuitMessage(0); return 0; }

} return DefWindowProc(hwnd, msg, wParam, lParam); }

Цей додаток в своєму головному вікні створює статичний орган (центрований по горизонталі текст “Введите строку и нажмите кнопку ОК”), під ним – однорядковий редактор тексту і, ще нижче, кнопку з написом ОК. Якщо ввести текст і натиснути кнопку ОК, на екрані з’явиться повідомлення, яке складається із введеного тексту.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.