- •Хмельницький національний університет проектування інтерфейсів користувача
- •Хмельницький 2009
- •Лабораторна робота №1
- •І. Теоретичні відомості
- •Для розробника вікно є сукупністю великої кількості елементів, які функціонують під управлінням додатку та операційної системи.
- •Створення вікон
- •Головна функція додатку
- •Структура тексту додатку
- •Допоміжні функції створення вікон
- •Приклади створення вікон
- •IV. Контрольні питання
- •Лабораторна робота №2
- •І. Теоретичні відомості
- •Статичний орган управління
- •Смуги прокрутки
- •IV. Контрольні питання
- •Лабораторна робота №3
- •І. Теоретичні відомості
- •Списки рядків
- •Комбінований список
- •IV. Контрольні питання
- •Лабораторна робота №4
- •І. Теоретичні відомості
- •Повідомлення wm_paint
- •Види контексту відображення
- •Встановлення атрибутів контексту відображення
- •Вивід тексту
- •Малювання геометричних фігур
- •IV. Контрольні питання
- •Лабораторна робота №5
- •І. Теоретичні відомості
- •Інструменти малювання
- •Відображення графічних об'єктів
- •IV. Контрольні питання
- •Лабораторна робота №6
- •І. Теоретичні відомості
- •Створення меню
- •Повідомлення від меню
- •Плаваюче меню
- •Акселератори
- •IV. Контрольні питання
- •Література
Допоміжні функції створення вікон
Обробка повідомлень в першу чергу передбачає визначення поточного стану вікон і управління цим станом, видачу тих чи інших повідомлень користувачу. Win32 API містить множину функцій, пов’язаних зі створенням вікон. Це функції пошуку, визначення стану, пересування вікон, а також обміну повідомленнями з користувачем.
Функції пошуку і визначення стану вікон. Часто потрібно визначити, чи існує деяке вікно. На це питання відповідає функція IsWindow:
BOOL IsWindow (HWND hwnd);
Функція IsWindowEnabled визначає, чи дозволяє вікно hwnd введення від миші чи з клавіатури:
BOOL IsWindowEnabled (HWND hwnd);
Для дозволу чи заборони вікну hwndвведення від миші чи з клавіатури викликають функцію EnableWindow:
BOOl EnableWindow (HWND hwnd, BOOL bEnable);
Фокус введення з клавіатури вікну hwnd передає функція SetFocus:
SetFocus (hwnd);
Наступна функція повертає ненульове значення, якщо вікно hwndзгорнуте:
BOOl lslconic (HWND hwnd);
Функція FindWindow запитує дескриптор недочірнього вікна класу lpClassName із заголовком lpWindowName:
HWND FindWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName);
Функції переміщення вікон.Для зміни розмірів та положення вікна hwnd викликають функцію MoveWindow:
BOOL MoveWindow(HWND hwnd,
int x, //нова координата лівого краю вікна
int y, //нова координата верхнього краю вікна
int nWidth, //нова ширина вікна
int nHeight, //нова висота вікна
BOOL bRepaint); // прапорець перефарбування вікна
Функція SetWindowPos змінює розміри, положення на екрані і позицію вікна hwnd по відношенню до інших вікон:
BOOL SetWindowPos(HWND hwnd,
HWND hWndInsertAfter, //дескриптор порядку розташування
int x, //нова координата лівого краю
int y, //нова координата верхнього краю
int cx, //нова ширина
int cy, //нова висота
UINT uFlags); //прапорець позиціювання
Функція SetForegroundWindow розміщує потік, який створив вікно hwnd, на передній план і активізує вікно hwnd:
BOOl SetForegroundWindow (HWND hwnd);
Для переміщення вікна важливо знати системні метрики екрану і вікна. Їх одержують за допомогою функції GetSystemMetrics. Вона повертає метрики і поточні установки конфігурації системи. Метрики системи – це габарити (ширина і висота) відображуваних елементів. Всі габарити повертаються в пікселях. ФункціяGetSystemMetricsоголошена наступним чином:
Int GetSystemMetrics(int nIndex);
Функція GetWindowRectобирає координати прямокутника, який обрамляє вікноhwnd:
BOOl GetWindowRect (HWND hwnd, LPRECT lpRect);
Функція GetClientRect обирає координати прямокутника, який обрамляє робочу область вікна:
BOOL GetClientRect (HWND hwnd, LPRECT lpRect);
Повідомлення додатку для користувача. Для виведення текстових повідомлень і одержанні відповіді користувача вживають вікно повідомлення. ФункціяMessageBox створює, відображає, забезпечує роботу і закриває вікно повідомлення:
int WINAPI MessageBox(
HWND hwnd, //дескриптор батьківського вікна
LPCTSTR lpText, //адреса тексту повідомлення
LPCTSTR lpCaption, //адреса заголовку вікна повідомлення
UINT uType); //стиль вікна повідомлення
При виклику функції MessageBeepкомп’ютер програє звук з множини зареєстрованих в системі звуків:
BOOL MessageBeep (UINT uType);
Якщо потрібно звернути увагу користувача на певне вікно, то можна декілька раз змінити підсвічування вікна та/або його піктограми.З цією метою використовують FlashWindow, яка за один виклик один раз змінює підсвічування вікна hwnd:
BOOL FlashWindow (HWND hwnd, BOOL bInvert);
Наступний фрагмент 4 рази змінює підсвічування вікна з інтервалом в 1с:
For (int i=1; i<=4; i++)
{ Flash Window (hwnd, TRUE);
Sleep (1000); // 1000 мілісекунд
}
При і=1 вікно hwnd прийме вигляд неактивного вікна і його потік призупиняється на 1с:
FlashWindow (hwnd, TRUE);
Sleep(1000);
Це зводиться до простої затримки часу.
При і=2 вікно hwnd прийме вигляд активного вікна і його потік призупиняється на 1с.
При і=3 вікно hwnd прийме вигляд неактивного вікна і його потік призупиняється на 1с.
При і=4 вікно hwnd прийме вигляд активного вікна і його потік призупиняється на 1с.