МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ
УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ
До друку та у світ дозволяю
Проректор з навчальної та
методичної роботи
В.В. Семенець
"____" ___________2000 г.
МЕТОДИЧНІ ВКАЗІВКИ
ДО ЛАБОРАТОРНИХ РОБІТ З КУРСУ
"СИСТЕМНЕ ПРОГРАМУВАННЯ ".
Частина 1. Windows API
для студентів денної форми навчання спеціальностей:
7091501 “Комп'ютерні системи та мережі”;
7091502 “Системне програмування”;
7091503 “Спеціалізовані комп'ютерні системи“.
Всі цитати, цифровий і фактичний матеріал і бібліографічні відомості перевірено, написання одиниць відповідає стандартам
Упорядники: Волк М.О.
Кадацька О.Й.
Відповідальний за випуск О.Г. Руденко
поз. 75
Харків 2001МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ
УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторних робіт з курсу
"СИСТЕМНЕ ПРОГРАМУВАННЯ "
Частина 1. Windows API
Харків 2001
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ
УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторних робіт з курсу
"СИСТЕМНЕ ПРОГРАМУВАННЯ "
Частина 1. Windows API
для студентів денної форми навчання спеціальностей:
7091501 “Комп'ютерні системи та мережі”;
7091502 “Системне програмування”;
7091503 “Спеціалізовані комп'ютерні системи“.
Харків 2001
Методичні вказівки до лабораторних робіт по курсу “Системне програмування”. Частина 1. Windows API. для студентів денної форми навчання спеціальностей: 7091501 “Комп'ютерні системи та мережі”, 7091502 “Системне програмування”, 7091503 “Спеціалізовані комп'ютерні системи“. /Упоряд. М.О. Волк, О.Й. Кадацька . - Харків: ХНУРЕ, 2001.- 32 с.
Упорядники: М.О. Волк.
О.Й. Кадацька
ЗАГАЛЬНІ ПОЛОЖЕННЯ
Дані методичні вказівки призначені для проведення лабораторних робіт із курсу “Системне програмування”. Лабораторні роботи введені до навчального процесу на підставі навчальних планів з вищезгаданих навчальних планів і проводяться в 4-му семестрі з метою навчання на практиці проектуванню, написанню та налагодженню програм системного рівня.
Методичні вказівки містять опис 8 лабораторних робіт. Кожний розділ, що відповідає окремій лабораторній роботі, складається з таких підрозділів: Мета роботи, вказівки з підготовки до виконання лабораторної роботи, сутність роботи, варіанти завдань, контрольні запитання та завдання.
При виконанні усіх лабораторних робіт використовується єдина конфігурація програмно-апаратних засобів: ПЕОМ типу IBM-PC із процесором не нижче Pentium ІІ, операційна система Windows95-98 або Windows NT, Microsoft Visual C++ v. 6.0 і старше, стандартні бібліотеки функцій Windows (Application Programming Interface) API і класів Microsoft Foundation Classes (MFC).
При проведенні лабораторних робіт студент повинен показати творчий підхід до розробки модулів програмного забезпечення, грамотне використання існуючого програмного забезпечення, гарне алгоритмічне мислення, навички висококваліфікованого програмування на алгоритмічних мовах низького рівня. Студенти повинні вміти перетворити свою програму в програмний продукт, виконати якісний аналіз програми, зробити оцінку отриманих результатів при використанні різноманітних варіантів.
Завдання припускають створення унікальної програми, що написана з використанням процедур і функцій операційної системи. Особливу увагу при розробці необхідно приділити ефективності з погляду використовуваних ресурсів обчислювальної системи. Велике значення має зручний інтерфейс із користувачем і гарною документацією до програми, призначена для користувачів і супроводу програми.
Виконання роботи містить такі етапи:
Підготовчий етап (до проведення лабораторної роботи):
а) одержання завдання відповідно до даних методичних вказівок, номера варіанта і вимог викладача;
б) вивчення теоретичного матеріалу за темою лабораторної роботи;
в) розробка алгоритму і чернетки програми.
Безпосереднє створення програми у комп'ютерному класі обчислювального центру:
а) проходження допуску до лабораторної роботи (обговорення з викладачем запропонованого розв’язання задачі);
б) написання програми з використанням Microsoft Visual C++ v. 6.0 ;
в) налагодження програми;
г) перевірка правильності виконання завдання (тестування).
Виконання звіту і захист лабораторної роботи.
Звіт повинен містити:
- титульний лист із найменуванням лабораторної роботи і даними виконавця;
мету роботи;
завдання;
опис алгоритму розв’язання поставленої задачі;
текст програми з коментарями і поясненнями;
результати роботи програми і їхній аналіз;
висновки.
Усі матеріали звіту необхідно зброшурувати, сторінки пронумерувати.
ПРИПУСКАЄТЬСЯ уявлення звіту з лабораторної роботи на дискеті (дискета не повертається).
Курс "Системне програмування" закінчується модульним екзаменом, що визначає виставляння оцінок за кожний вид занять і робіт, проведених у рамках курсу.
Оцінкою "відмінно" оцінюються роботи, виконані відповідно до завдання і вищевикладених вимог, виконаними самостійно, що мають оригінальні технічні розв’язання. При оцінці проекту важливу роль відіграють чіткі відповіді на поставлені запитання. Оцінкою "добре" оцінюються роботи, що мають окремі недоліки в реалізації, деякі прогалини в проробці окремих питань, неповні відповіді на запитання. Оцінкою "задовільно" оцінюються роботи, що мають суттєві недоліки в реалізації, слабку проробку ключових питань, недостатньо аргументовані відповіді на запитання.
1 СТРУКТУРА WINDOWS - ДОДАТКІВ. ВІКОННА ПРОЦЕДУРА. ОБРОБКА ПОВІДОМЛЕНЬ
1.1 Мета роботи
Ознайомлення зі структурою Windows - додатків, організацією взаємодії програм з операційною системою, одержання практичних навичок з упорядкування, написання і налагодження простих програм, що містять опис виду вікна додатка, віконну процедуру, обробку елементарних повідомлень від клавіатури, миші й інших пристроїв.
1.2 Вказівки з підготовки до виконання лабораторної роботи
Необхідно вивчити принцип побудови та логіку роботи Windows-додатка, звернувши увагу на порядок створення додатка (формування структури класу вікна, реєстрація класу, написання віконної процедури, створення і відображення вікна, цикл обробки повідомлень).
При підготовці до роботи необхідно вивчити конспект лекцій зазазначеною темою зазначеній темі, методичні вказівки, а також розділи, зазначені в [16, c. 4-52], [17, c. 7-26].
Суть роботи
Будь-який віконний додаток, написаний під Windows, повинен містити у собі такі елементи:
Функцію реєстрації класу вікна.
Функцію створення вікна.
Віконну процедуру.
Цикл обробки повідомлень.
Далі за текстом наводиться приклад найпростішої програми під Windows, що виводить на екран вікно додатка з написом "Привіт, світ! ". Дану програму необхідно взяти за основу при розв’язанні свого варіанта завдання. Програма містить усі необхідні для розуміння її роботи, коментар.
#include <windows.h> // підключення бібліотеки з функціями API
// Глобальні змінні:
HINSTANCE hInst; // Опис додатка
// Попередній опис функцій
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
// Основна програма
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
// Реєстрація класу вікна
MyRegisterClass(hInstance);
// Створення вікна додатка
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
// Цикл обробки повідомлень
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
// FUNCTION: MyRegisterClass()
// Реєструє клас вікна
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW; // стиль вікна
wcex.lpfnWndProc = (WNDPROC)WndProc; // віконна процедура
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance; // опис додатка
wcex.hIcon = MyIcon1; // визначення іконки
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
// визначення курсору
wcex.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
// установка фона
wcex.lpszMenuName = NULL; // визначення меню
wcex.lpszClassName = szWindowClass; // ім'я класу
wcex.hIconSm = NULL;
return RegisterClassEx(&wcex); // реєстрація класу вікна
}
// FUNCTION: InitInstance(HANDLE, int)
// Створює вікно додатка і зберігає покажчик додатка в змінній hInst
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // зберігає опис додатка в змінній hInst
hWnd=CreateWindow(szWindowClass, // им’я класу вікна
szTitle, // имя приложения
WS_OVERLAPPEDWINDOW, // стиль вікна
CW_USEDEFAULT, // положення по Х
CW_USEDEFAULT, // положення по Y
CW_USEDEFAULT, // розмір по Х
CW_USEDEFAULT, // розмір по Y
NULL, // опис батьківського вікна
NULL, // опис меню вікна
hInstance, // покажчик додатка
NULL); // параметри створення .
if (!hWnd) // Якщо вікно не створилося, функція повертає FALSE
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow); // Показати вікно
UpdateWindow(hWnd); // Оновити вікно
return TRUE; //Успішне завершення функції
}
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
// Віконна процедура. Приймає й опрацьовує усі
// повідомлення, що надходять у додаток
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
RECT rt;
switch (message)
{
case WM_CREATE: // Повідомлення надходить при створенні вікна
break;
case WM_PAINT: // Перерисувати вікно
hdc = BeginPaint(hWnd, &ps); // Почати графічний вивід
GetClientRect(hWnd, &rt); // Область вікна для рисування
DrawText(hdc, "Привіт, світ! ", -1, &rt,
DT_SINGLELINE|DT_CENTER | DT_VCENTER);
EndPaint(hWnd, &ps); // Закінчити графічний вивід
break;
case WM_DESTROY: // Завершення роботи
PostQuitMessage(0);
break;
default:
// Обробка повідомлень, що не оброблені користувачем
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Особливу увагу в першій лабораторній роботі треба приділити використанню функцій реєстрації, створенню вікна та віконній процедурі. Докладний опис параметрів цих функцій можна дізнатися за допомогою MSDN або Win32 Programmer's Reference, установлених на робочих місцях.
Варто звернути увагу, що надалі за текстом методичних вказівок буде відсутній такий докладний розгляд програм, але будуть наведені ряд функцій, що відповідають темі заняття. При необхідності одержання їхнього опису необхідно використовувати вищевказані довідкові системи або відповідну літературу, що наведена наприкінці методичних вказівок.
1.4 Завдання на лабораторну роботу
Написати з використанням функцій API програму, що створює віконний додаток Windows. Програма повинна містити реєстрацію класу вікна, процедуру створення вікна, віконну процедуру і цикл обробки повідомлень. Програма повинна виводити в клієнтській області вікна прізвище, ім'я, групу студента, що виконав завдання і перерисовувати її при обробці повідомлення WM_PAINT. Параметри утворюваного вікна повинні відповідати варіанту завдань. Варіанти завдань наведені нижче.
Варіант 1
Стиль класу: вирівнювання клієнтської області по горизонталі.
Тип іконки: IDI_APPLICATION.
Тип курсору: IDC_ARROW.
Колір фона вікна: БІЛИЙ.
Ім'я класу вікна: ім'я студента (англійською мовою).
Стиль вікна:
а) вікно має заголовок і рамку, що обрамовує;
б) WS_OVERLAPPEDWINDOW.
Позиція вікна: за замовчанням.
Варіант 2
Стиль класу: перерисування вікна при зміні горизонтального розміру.
Тип іконки: IDI_HAND.
Тип курсору: IDC_WAIT.
Колір фона вікна: СВЕТЛОСЕРЫЙ.
Ім'я класу вікна: ім'я студента (англійською мовою).
Стиль вікна:
а) у вікна є кнопка мінімізації;
б) WS_OVERLAPPEDWINDOW.
Позиція вікна: у центрі екрана шириною 400 висотою 250 точок.
Варіант 3
Стиль класу: перерисування вікна при зміні вертикального розміру;
Тип іконки: IDI QUESTION.
Тип курсору: IDC_CROSS.
Колір фона вікна: СІРИЙ.
Ім'я класу вікна: ім'я студента (англійською мовою).
Стиль вікна:
а) у вікна є системне меню;
б) WS_OVERLAPPEDWINDOW.
Позиція вікна: із координатами (150,200,480,500).
Варіант 4
Стиль класу: заборонити команду «закрити» у системному меню.
Тип іконки: IDI_WINLOGO.
Тип курсору: IDC_SIZE.
Колір фона вікна: ТЕМНОСІРИЙ.
Ім'я класу вікна: ім'я студента (англійською мовою).
Стиль вікна:
а) у вікна є горизонтальне прокручування;
б) WS_OVERLAPPEDWINDOW.
Позиція вікна: верхній кут у координатах (50,90) і висотою 500, шириною 400 точок.
Варіант 5
Стиль класу: посилати повідомлення віконній процедурі при подвійнім щиголі миші, якщо курсор знаходиться в межах вікна.
Тип іконки: IDI_ERROR.
Тип курсору: IDC_ICON.
Колір фона вікна: ЧОРНИЙ.
Ім'я класу вікна: ім'я студента (англійською мовою).
Стиль вікна:
а) у вікна є вертикальна лінійка прокручування;
б) WS_OVERLAPPEDWINDOW.
Позиція вікна: по нижньому краю екрана шириною 300 і висотою 200 точок.
Варіант 6
Стиль класу: вирівнювання клієнтської області по горизонталі, перерисування вікна при зміні вертикального розміру.
Тип іконки: IDI_INFORMATION.
Тип курсору: IDC_NO.
Колір фона вікна: БІЛИЙ.
Ім'я класу вікна: ім'я студента (англійською мовою).
Стиль вікна:
а) створюється мінімізоване вікно;
б) WS_OVERLAPPEDWINDOW.
Позиція вікна: по верхньому краю екрана шириною 400 і висотою 500 точок
Варіант 7
Стиль класу: заборонити команду «закрити» у системному меню, перерисування вікна при зміні вертикального і горизонтального розміру.
Тип іконки: IDI_APPLICATION.
Тип курсору: IDC_HELP.
Колір фона вікна: СВІТЛОСІРИЙ.
Ім'я класу вікна: ім'я студента (англійською мовою).
Стиль вікна:
а) вікно має заголовок і рамку, що обрамовує, у вікна є кнопка мінімізації у вікна є системне меню;
б) WS_OVERLAPPEDWINDOW.
Позиція вікна: по лівому краю екрана шириною 500 і висотою 200 крапок
Варіант 8
Стиль класу: вирівнювання клієнтської області по горизонталі, перерисування вікна при зміні горизонтального розміру, перерисування вікна при зміні вертикального розміру.
Тип іконки: IDI QUESTION.
Тип курсору: IDC_ARROW.
Колір фона вікна: СІРИЙ.
Ім'я класу вікна: ім'я студента (англійською мовою).
Стиль вікна:
а) у вікна є горизонтальна лінійка прокручування, у вікна є вертикальна лінійка прокручування, створюється мінімізоване вікно;
б) WS_OVERLAPPEDWINDOW.
Позиція вікна: по правому краю екрана шириною 450 і висотою 440 крапок
Варіант 9
Стиль класу:
заборонити команду «закрити» у системному меню, посилати повідомлення віконній процедурі при подвійному щиголі миші, якщо курсор знаходиться в межах вікна.
Тип іконки: IDI_ERROR.
Тип курсору: IDC_CROSS.
Колір фона вікна: ТЕМНОСІРИЙ.
Ім'я класу вікна: ім'я студента (англійською мовою).
Стиль вікна:
а) вікно має заголовок і рамку, що обрамовує, у вікна є кнопка мінімізації,
у вікна є системне меню;
б) WS_OVERLAPPEDWINDOW.
Позиція вікна: за замовчанням.
1.5 Контрольні запитання і завдання
У чому полягає об'єктно-орієнтований підхід до програмування?
Розкрийте особливості архітектури, яка керується подіями.
Яке призначення віконної процедури додатка?
Опишіть основні етапи створення вікна додатка.
Поясніть зміст циклу опрацювання повідомлень.
Яким чином відбувається обробка повідомлень у додатках Windows?
Розкрийте сутність синхронних та асинхронних повідомлень.
Яким чином формуються повідомлення?
Поясніть особливості формування повідомлення WM_PAINT. Що таке дійсні і недійсні прямокутники?
Які системні повідомлення ви знаєте?
2 КОНТЕКСТИ ПРИСТРОЇВ. ВИВІД ТЕКСТУ
2.1 Мета роботи
Ознайомлення з концепцією контекстного подання пристроїв у сучасних операційних системах, одержання практичних навичок з упорядкування, написання і налагодження програм, що здійснюють апаратно-незалежне виведення інформації на екран дисплея, принтери та інші периферійні пристрої, подані контекстами.
2.2 Вказівки з підготовки до виконання лабораторної роботи
Необхідно засвоїти основні принципи контекстної концепції уявлення пристроїв виведення інформації, структуру даних контекстів, а також порядок використання основних функцій роботи з контекстами пристроїв.
При підготовці до роботи необхідно вивчити конспект лекцій із зазначеной теми, методичні вказівки, а також розділи, зазначені в [16, c. 57-62], [17, c. 28-32].
2.3 Суть роботи
Контекст пристрою фактично є структурою даних, що внутрішньо підтримується GUI. Контекст пристрою пов'язаний із конкретним пристроєм виведення інформації, таким як дисплей, принтер, плоттер. Деякі значення в контексті пристрою є графічними "атрибутами", що визначають деякі особливості роботи функцій рисування. Наприклад, для функції TexOut, ці атрибути задають колір тексту, колір фона, положення у вікні при виведенні і т.п.
Перед здійсненням виведення, програма повинна одержати опис контексту, усі операції з виведення здійснювати з використанням опису контексту, після чого програма повинна звільнити опис контексту.
У даній роботі необхідно використовувати такі функції API: BeginPaint або CetDC для одержання опису контексту пристрою та EndPaint або ReleaseDC для його знищення. Слід зазначити, що при виклику BeginPaint і EndPaint обновлюється фон робочої області і встановлює робочу область у дійсний стан. Одержання робочої області вікна можна виконати за допомогою функції GetClientRect. При цьому, використовувати контекст, отриманий за допомогою BeginPaint, можна тільки для рисування в робочій області вікна. Виведення тексту можна здійснювати за допомогою функцій TextOut і DrawText. Інформація про системні параметри утворюється за допомогою функцій GetTextMetrics і GetSystemMetrcs.
2.4 Завдання на лабораторну роботу
Написати, із використанням функцій API, програму, що виводить у вікно додатка інформацію, одержану з контексту, про пристрій і метрику:
Варіант 1
Інформація про метрику: ширина і висота екрана в точках, ширина і висота горизонтальної смуги прокручування, ширина і висота рамки вікна додатка.
Інформація про пристрій: ширину поля виведення в міліметрах.
Інформація про шрифт: розмір простору над символом для спеціальних знаків.
Варіант 2
Інформація про метрику: ширина і висота вікна діалогу, ширина і висота іконки додатка.
Інформація про пристрій: висоту поля виведення в міліметрах.
Інформація про шрифт: розмір межрядкової відстані.
Варіант 3
Інформація про метрику: ширина і висота курсору, ширина і висота клієнтської області додатка.
Інформація про пристрій: ширину поля виведення в пікселах.
Інформація про шрифт: усереднена ширина символу рядка.
Варіант 4
Інформація про метрику: мінімальну і максимальну ширину віконного додатка, мінімальну і максимальну ширину іконки.
Інформація про пристрій: висота поля виведення в растрових лініях.
Інформація про шрифт: ширина найширшого символу.
Варіант 5
Інформація про метрику: наявність миші в системі і число кнопок у миші.
Інформація про пристрій: кількість фонтів.
Інформація про шрифт: висота шрифту.
Варіант 6
Інформація про метрику: мінімальне і максимальне значення, до якого можна змінити ширину і висоту вікна.
Інформація про пристрій: розмір структури даних про пристрій.
Інформація про шрифт: висота шрифту і розмір міжрядкової відстані.
Варіант 7
Інформація про метрику: розмір прямокутника, попадаючи в який зараховується подвійний щиголь миші.
Інформація про пристрій: відносна ширина точки.
Інформація про шрифт: усереднений розмір символу рядка і розмір простору над символом для спеціальних знаків.
Варіант 8
Інформація про метрику: ширина і висота іконки додатка, ширина і висота вертикальної смуги прокрутки.
Інформація про пристрій: відносна висота точки.
Інформація про шрифт: ширина найширшого символу.
Варіант 9
Інформація про метрику: ширину смуги меню, наявність миші в системі.
Інформація про пристрій: дійсний колірний дозвіл.
Інформація про шрифт: усереднена ширина символу рядка і ширина найширшого символу.
2.5 Контрольні запитання і завдання
Дайте визначення контексту пристрою.
Розкрийте суть поняття «опис контексту пристрою». Для чого він призначений?
Якими засобами можна одержати опис контексту пристрою?
Чим відрізняється використання функцій GetDC, ReleaseDC і BeginPaint, EndPaint?
Яким чином можливо змінити шрифт, використовуваний у даному контексті?
У чому відмінність растрових шрифтів і шрифтів «true type»?
Які атрибути контексту пристрою і тексту Ви знаєте?
Що таке «кисть» і «фон»? Для чого вони призначені і як вони задаються?
Які функції виведення тексту Ви знаєте?
Дайте характеристику метричним параметрам тексту. Яким чином одержати інформацію про поточні метричні параметри тексту?
Що розуміється під робочою і клієнтською областю вікна додатка?
3 ГРАФІЧНИЙ ІНТЕРФЕЙС КОРИСТУВАЧА (GRAPHICAL USER INTERFACE, GUI)
3.1 Мета роботи
Ознайомлення з концепцією й елементами графічного інтерфейсу користувача (GUI), принципами формування графіки на растровому екрані дисплея, одержання практичних навичок з упорядкування, написання і налагодження програм, що здійснюють графічне виведення тексту, точкової та векторної графіки.
3.2 Вказівки з підготовки до виконання лабораторної роботи
Необхідно вивчити концепцію графічного інтерфейсу пристрою (GDI), його структуру, основні типи функцій і примітивів GDI, структуру інформації про кольори, атрибути, шрифти контексту пристроїв, принципи їхнього формування і зміни.
При підготовці до роботи необхідно вивчити конспект лекцій за зазначеною темою, методичні вказівки, а також розділи, зазначені в [16, c. 94-247], [17, c. 19-32].
3.3 Суть роботи
Для рисування в робочій області вашого вікна використовуйте функції графічного інтерфейсу пристрою GDI. Одна з основних задач GDI - підтримка апаратно-незалежної графіки. Функції GDI дозволяють маніпулювати як із піксельною, так і векторною графікою.
У своїй основі функції GDI можуть бути розбиті на декілька значних груп.
Функції, що одержують (або створюють) і звільняють (або знищують) покажчики контекстів пристроїв. Дані функції докладно розглядалися в п. 3 даних методичних вказівок.
Функції, що одержують інформацію про контексти пристрою (див. вище).
Функції рисування. Найбільше часто використовувані з них - MoveToEx (переміщення пера у нові координати), LineTo (рисування лінії), PolyLineTo (рисує ламану лінію по координатах точок), Rectangle (рисує прямокутник), Ellipse (рисує еліпс), PolyBezier (рисує сплайни Безьє), функції роботи з полігонами - CreateRectRgn, CreateEllipticRgn, CreatePolygonRgn, CombineRgn, FillRgn, FrameRgn, функції роботи з бітовими образами - CreateDIBitmap, SetDIBitmap, GetDIBits, CreateBitmap , SetBitmapBits, BitBlt, StretchBlt, PatBlt.
Функції, що встановлюють і одержують атрибути контексту пристрою, що встановлюють різноманітні особливості роботи функцій рисування. Наприклад, SetTextColor, SetTextAlign.
Функції, що працюють з об'єктами GDI. До них ставляться функції роботи з перами (CreatePen, CreatPenIndirect), фоном (SetBkColor,GetBkColor, CreateSolidBrush, CreateHatchBrush, CreateBrushIndirect), функції керування об'єктами: GetStockObject, SelectObject, DeleteObject.
Користуючись даними функціями, можна працювати з такими типами графічних об'єктів (примітивами):
Лінії і криві. GDI підтримує прямі лінії, прямокутники, еліпси, дуги, сплайни Безьє.
Зафарбований регіон. Якщо набір прямих і кривих ліній обмежує з усіх боків деяку область, то вона може бути зафарбована з використанням об'єкта GDI «кисть» (brush). Ця кисть може бути суМетаною, штриховою або шаблоновою.
Бітові (растрові) образи - двовимірні масиви бітів, що відповідають пікселям пристрою відображення. Бітові образи використовуються для відображення картинок, курсорів миші, іконок, кнопок панелі інструментів і т.п.
Текст. Операційна система підтримує безліч функцій роботи з текстом, шрифтами.
Метафайли - набір викликів команд GDI, збережений у файловому вигляді. Використовуються для збереження та передачі векторної графіки.
Регіон - складна область, що складається з будь-яких фігур.
Шлях - набір відрізків та ламаних ліній. Можуть використовуватися для рисування, зафарбовування та при відсіканні.
Відсікання - деяка область, що обмежує простір для графічного виведення.
Палітра - набір кольорів для рисування.
3.4 Завдання на лабораторну роботу
Варіант 1
Написати програму, що рисує чотири прямокутники в клієнтській області вікна, що поділяють його на чотири рівні частини. При зміні розмірів вікна варто перерисувати прямокутники, вирахувавши їхні нові розміри.
Варіант 2
Створити вікно додатка в центрі робочого столу з такими розмірами: ширина 600, висота 450 точок. У центрі вікна нарисувати зафарбований еліпс із значеннями діагоналей 250 і 100 точок. Навколо еліпса описати п'ятикутник, сторінки якого у своїй середині є дотичними до еліпса. При зміні розмірів вікна, відбувається пропорційна зміна рисунка.
Варіант 3
Використовуючи сплайни Безьє, нарисувати в клієнтській області вікна додатка графіки функцій "синуса" та "косинуса". Кожний із графіків, а також осі координат повинні бути різного кольору.
Варіант 4
Написати програму рисування графіка функції, обумовленої користувачем. Рівняння задається у вигляді функції, діапазон зміни аргументу задається константою. Програма автоматично визначає масштаб і виводить графік функції таким чином, щоб усі значення функції були виведені в межах вікна додатка.
Варіант 5
Нарисувати в клієнтській області вікна додатка декілька фігур (прямокутники, еліпси, полігони). Написати алгоритм зафарбування усіх, отриманих у результаті цього, областей. Кожна область зафарбовується своїм оригінальним кольором і штрихуванням.
Варіант 6
Написати програму, що заповнює клієнтську область вікна додатка різнобарвними квадратами одного розміру. При зміні розмірів вікна відбувається перерисування, причому, кількість квадратів залежить від розмірів вікна.
Варіант 7
Створити програму, що виконує створення і виведення на екран бітового зображення. Рисунок задавати у вигляді константного масиву на початку програми. При зміні розмірів вікна виконати масштабування рисунка за розмірами вікна.
Варіант 8
Використовуючи шляхи, написати програму, що рисує замкнону фігуру, задану викладачем, зафарбовану заданим фоном і штрихуванням.
Варіант 9
Написати алгоритм зафарбування довільної області екрана, обмеженої безупинним контуром, заданим викладачем. Початок зафарбування визначається довільною точкою усередині контуру.
3.5 Контрольні запитання та завдання
Яке призначення графічного інтерфейсу пристрою (GDI)?
Які типи функцій GDI Ви знаєте?
Які примітиви GDI Ви знаєте?
Дайте характеристику метафайлам.
Що таке «сплайни Безьє»? Яким чином їх використовувати?
Які примітиви дозволяють створювати функції API?
Дайте визначення поняття «перо». Яким чином відбувається створення, вибір і видалення пер?
Що визначає режим рисування?
У чому особливість рисування полігонів?
Системи координат пристрою. Чим відрізняються фізичні і логічні координати?
Опишіть процес використання бітових образів.
4 ЗАСОБИ ВВЕДЕННЯ ІНФОРМАЦІЇ
4.1 Мета роботи
Ознайомлення з пристроями, що здійснюють введення інформації в комп'ютер (миша, клавіатура), їхнім програмним поданням в операційній системі, а також із програмними елементами взаємодії користувача й ЕОМ (діалогове вікно), одержання практичних навичок з упорядкування, написання і налагодження програм, що здійснюють взаємодію ЕОМ - користувач.
4.2 Вказівки з підготовки до виконання лабораторної роботи
Необхідно вивчити основні елементи інтерактивних програм, що працюють на персональних комп'ютерах. Більшість додатків Windows95 активно використовують користувальне введення з клавіатури, а також підтримують роботу з мишею. Обов'язковим є розгляд програмного подання пристроїв введення усередині ядра Windows, а також системні і несистемні апаратні повідомлення, за допомогою яких здійснюється передача даних додаткам.
При підготовці до роботи необхідно вивчити конспект лекцій за зазначеною темою, методичні вказівки, а також розділи, зазначені в [16, c. 255-441], [17, c. 88-101].
4.3 Огляд теми роботи
Більшість програм, що працюють під Windows, активно використовують засоби інтерактивної взаємодії з користувачем - мишу, клавіатуру, а також програмні засоби - вікна діалогу.
При роботі з клавіатурою варто приділити особливу увагу вивченню таких питань: фокус уведення, апаратні та символьні повідомлення, віртуальні коди клавіш, робота з кареткою.
Миша - це графічний пристрій введення інформації з однією або більш кнопками. Windows підтримує однокнопкову, двокнопкову або трикнопкову мишу.
Робота додатків із клавіатурою і мишею заснована на системі повідомлень. Будь-яка дія (натиснення клавіш, переміщення миші і т.п.) наводить до такої дії, що Windows посилає повідомлення активному додатку. Дане повідомлення опрацьовується віконною процедурою додатка. Існує більш 20 видів повідомлень, одержуваних програмою від миші і клавіатури.
Слід зазначити, що вікна додатків звичайно мають у собі дочірні вікна, до яких відносяться кнопки (buttons), прапорці (check boxes), перемикачі (radio buttons), текст (text strings), смуги прокручування (scroll bars), вікна редагування (edit boxes), списки (list boxes). Дочірнє вікно опрацьовує повідомлення миші і клавіатури і сповіщає батьківське вікно про те, що стан дочірнього вікна змінився. У цьому випадку дочірнє вікно стає для батьківського пристроєм уведення. Воно інкапсулює особливі дії, які пов'язані з графічним уявленням вікна на екрані, реакцією на введення користувача, і сповіщення іншого вікна при уведенні важливої інформації. Є можливість створювати свої власні дочірні вікна управління.
4.4 Завдання на лабораторну роботу
Варіант 1
Написати програму, що стежить за переміщенням показника миші і виводить його координати у вікні додатка. Якщо при виході за вікно права кнопка миші натиснута, програма продовжує стежити за переміщенням миші і виводити її координати.
Варіант 2
Написати програму телетайпа, що виводить у вікно додатка символи натиснутих клавіш.
Варіант 3
Написати програму переміщення простого зображення по вікну додатка за натисненням клавіш управління курсором.
Варіант 4
Написати програму, що рисує прямокутники за допомогою курсору миші. Натиснення правої кнопки миші визначає положення кутів прямокутника. За допомогою лівої кнопки миші можна нарисувати прямокутник із кольором фона (очищення прямокутної області).
Варіант 6
Написати програму, що рисує безупинну лінію при пересуванні миші по вікну додатка з натиснутою лівою кнопкою. Зображення повинно оновлюватися за приходом події WM_PAINT.
Варіант 7
Написати програму, що дозволяє малювати лінії. Натиснення лівої кнопки миші визначає першу точку лінії. Не відпускаючи кнопки, користувач переміщає мишу у другу точку відрізка. Відпускання кнопки призводить до фіксації другої точки лінії. Під час прямування з натиснутою кнопкою миші, лінія повинна оновлюватися.
Варіант 8
Написати програму, що емулює роботу миші за допомогою клавіатури. За натисненням визначених клавіш курсор миші пересувається в межах вікна додатка. При емуляції натиснення лівої клавіші відбувається зміна кольору фона.
Варіант 9
Написати програму, що рисує олімпійські кільця. За натисненням клавіш із цифрами 1-5 одне з кілець із відповідним номером змінює свій колір. Те ж саме відбувається при щиголі миші на однім із кілець.
4.5 Контрольні запитання та завдання
Які засоби введення інформації Ви знаєте?
Дайте визначення таким поняттям як «каретка» і «курсор»?
Чим відрізняються апаратні (keystrokes) і символьні (characters) повідомлення?
Які повідомлення від клавіатури опрацьовуються віконною процедурою?
Перелічіть повідомлення, що надходять від миші.
Що таке «фокус уведення»?
Як ви вважаєте, чи можна одержати повідомлення від миші, якщо курсор перебуває за межами вікна?
Як малювати за межами вікна додатка?
Як опрацьовуються натиснення кнопки в робочій області вікна, створеною функцією CreateWindow?
Яким чином можна одержати інформацію про наявність миші в системі і її характеристики?
5 ВИКОРИСТАННЯ РЕСУРСІВ
5.1 Мета роботи
Ознайомлення з ресурсами як засобом створення візуального інтерфейсу і завдання параметрів і характеристик програмного додатка, одержання практичних навичок з упорядкування, написання і налагодження програм, що містять у ресурсних файлах опис курсорів, бітових образів, вікон діалогу, меню.
5.2 Вказівки з підготовки до виконання лабораторної роботи
Необхідно вивчити особливості основних видів ресурсів (іконок, курсорів, бітових образів, символьних рядків, меню, вікна діалогу і т.д.), а також порядок їхній визначення в ресурсних файлах додатків і їхнє формування під час функціонування програми.
При підготовці до роботи необхідно вивчити конспект лекцій за зазначеною темою, методичні вказівки, а також розділи, зазначені в [16, c. 441-469], [17, c.