- •Хмельницький національний університет проектування інтерфейсів користувача
- •Хмельницький 2009
- •Лабораторна робота №1
- •І. Теоретичні відомості
- •Для розробника вікно є сукупністю великої кількості елементів, які функціонують під управлінням додатку та операційної системи.
- •Створення вікон
- •Головна функція додатку
- •Структура тексту додатку
- •Допоміжні функції створення вікон
- •Приклади створення вікон
- •IV. Контрольні питання
- •Лабораторна робота №2
- •І. Теоретичні відомості
- •Статичний орган управління
- •Смуги прокрутки
- •IV. Контрольні питання
- •Лабораторна робота №3
- •І. Теоретичні відомості
- •Списки рядків
- •Комбінований список
- •IV. Контрольні питання
- •Лабораторна робота №4
- •І. Теоретичні відомості
- •Повідомлення wm_paint
- •Види контексту відображення
- •Встановлення атрибутів контексту відображення
- •Вивід тексту
- •Малювання геометричних фігур
- •IV. Контрольні питання
- •Лабораторна робота №5
- •І. Теоретичні відомості
- •Інструменти малювання
- •Відображення графічних об'єктів
- •IV. Контрольні питання
- •Лабораторна робота №6
- •І. Теоретичні відомості
- •Створення меню
- •Повідомлення від меню
- •Плаваюче меню
- •Акселератори
- •IV. Контрольні питання
- •Література
IV. Контрольні питання
Чим відрізняються вікна визначених системою класів від звичайних вікон?
Які аргументи обов’язкові при створенні органів управління за допомогою функції CreateWindow?
Які основні етапи створення орагнів управління?
Лабораторна робота №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); }
Цей додаток в своєму головному вікні створює статичний орган (центрований по горизонталі текст “Введите строку и нажмите кнопку ОК”), під ним – однорядковий редактор тексту і, ще нижче, кнопку з написом ОК. Якщо ввести текст і натиснути кнопку ОК, на екрані з’явиться повідомлення, яке складається із введеного тексту.