Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ІК (Говорущенко) Методичка.doc
Скачиваний:
6
Добавлен:
23.02.2016
Размер:
762.88 Кб
Скачать

IV. Контрольні питання

  1. Чим відрізняються вікна визначених системою класів від звичайних вікон?

  2. Які аргументи обов’язкові при створенні органів управління за допомогою функції CreateWindow?

  3. Які основні етапи створення орагнів управління?

Лабораторна робота №3

Тема: Органи управління.Редактор тексту. Списки рядків. Комбіновані списки

Мета: Знайомство зі створенням органів управління з точки зору мови програмування, зі створенням редактора тексту, списків рядків та комбінованих списків.

І. Теоретичні відомості

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

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

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

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

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

Стиль

Призначення

1

2

ES_AUTO

HSCROLL

Автоматично зсувати текст на 10 символів ліворуч при досягненні правої границі вікна введення. В багаторядковому редакторі для переходу на початок наступного рядка потрібно натиснути Enter

ES_AUTO

VSCROLL

Автоматично зсувати текст на одну сторінку вгору при натисканні клавіші Enter на останньому рядку

ES_CENTER

Центрувати рядки по горизонталі

ES_LEFT

Вирівнювати текст по лівому краю

ES_LOWERCASE

Перетворювати символи, якы вводяться, в рядкові

ES_READ

ONLY

Заборона редагування тексту у вікні редагування

ES_UPPER

CASE

Перетворити символи, що вводяться, в заголовочні

1

2

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); }

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