Віконні повідомлення та функції роботи з вікнами
Вікно ідентифікується задескриптором вікна.Цей дескриптор (змінна типу HWND) однозначно визначає кожне вікно в системі. Windows організовує свої вікна в ієрархічну структуру:
- кожне вікно має батька, коренем дерева всіх вікон є вікно робочого столу, створюваного Windows під час завантаження;
- для всіх вікон верхнього рівня (для головних вікон додатків та інших вікон додатків, що перекриваються і спливають) батьківським вікном є робочий стіл.
Батько дочірнього вікна вікно верхнього рівня або інше дочірнє вікно, вищого рівня ієрархії.
Між вікнами верхнього рівня (вікна, що перекриваються і спливають) існує ще одна ієрархічна зв'язок. Власником вікна верхнього рівня може бути інше вікно того самого рівня. Вікно, що має власника, завжди відображається поверх свого власника та зникає при мінімізації вікна-власника. Типовим випадком володіння одного вікна верхнього рівня іншим є програма, що відображає діалогове вікно. Діалогове вікно не є дочірнім вікном (воно є спливаючою вікном), але його власником залишається вікно програми.
Вікно, як правило, реагує на багато повідомлень. Розглянемо найчастіше оброблювані повідомлення:
- WMCREATE посилається вікну перед тим, як вікно стане видимим, при отриманні повідомлення програма може ініціалізувати потрібні дані;
- WMDESTROY надсилається вікну, яке вже видалено з екрану і має бути зруйноване;
- WMCLOSE вказує, що вікно має бути закритим. Програма може при його обробці, наприклад, вивести діалогове вікно підтвердження закриття вікна;
- WMQUIT повідомлення, що вимагає завершити програму;
- WMQUERYENDSESSION повідомляє додаток про намір Windows закінчитисеанс. Програма може повернути значення FALSE у відповіді на це повідомлення, запобігши цим вимкненню Windows. Після обробки повідомлення WMQUERYENDSESSION Windows надсилає всім програмам повідомлення WMENDSESSION з результатами цієї обробки;
- WMENDSESSION надсилається програмам після обробки повідомлення WMQUERYENDSESSION. Воно вказує, чи має Windows вимкнутися, чи вимкнення відкладено. Якщо Ви вимикаєте сеанс Windows, може закінчитися в будь-який час після обробки повідомлення WMENDSESSION усіма програмами. Тому важливо, щоб програми виконали всі завдання щодо забезпечення безпечного завершення роботи;
- WMACTIVATE вказує, що вікно верхнього рівня буде активізовано або деактивізовано. Повідомлення спочатку надсилається вікну, яке має бути деактивізовано, а потім вікну, яке має бути активізовано;
- WMSHOWWINDOW вказує, що вікно має бути приховане або відображене;
- WMENABLE посилається вікну, коли воно стає доступним чи недоступним. Недоступне вікно не може приймати дані від миші або клавіатури;
- WMMOVE вказує, що розташування вікна змінилося;
- WMSIZE вказує, що розмір вікна змінено;
- WMSETFOCUS вказує на отримання вікном фокусу клавіатури;
- WMKILLFOCUS вказує, що вікно має втратити фокус клавіатури;
Розглянемо функції, що дозволяють додатку досліджувати ієрархію вікон, знаходити, переміщати, змінювати режим відображення, змінювати вигляд вікна:
AnimateWindowдає можливість створювати спеціальні ефекти під час показу або приховування вікон. Є чотири типи мультиплікації: ролик, слайд, згортання або розгортання та плавне перетікання;
CloseWindowзгортає (але не руйнує) певне вікно;
FindWindowвикористовується для пошуку вікна верхнього рівня на ім'я його класу вікна або за заголовком вікна;
FlashWindowпризначена для створення вікна з миготливим заголовком, використовується для привернення уваги до вікна;
FlashWindowExудосконалений варіант FlashWindow;
GetClientRectповертає координати клієнтської області вікна;
GetParentповертає дескриптор батьківського вікна для зазначеного;
GetDesktopWindowповертає дескриптор вікна робочого столу Windows;
GetTitleBarlnfoповертає інформацію про рядок заголовка;
GetWindowнадає найбільш гнучкий спосіб роботи з ієрархією вікон. Залежно від значення другого параметра, цю функцію можна використовувати для отримання ідентифікатора батьківського вікна, власника, вікон одного рівня або дочірніх вікон.
GetWindowPlacementповертає дані про розташування вікна;
GetWindowTextLengthповертає довжину (кількість символів) тексту рядка заголовка для вікна, якщо вікно має область заголовка. Якщо вікно є елементом управління, функція повертає довжину тексту всередині елемента управління.
IsChildперевіряє, чи є вікно дочірнім вікном або породженим вікном для зазначеного батьківського вікна;
IsWindowвизначає, чи відповідає заданий дескриптор існуючому вікну;
IsWindowVisibleповертає інформацію про стан заданого вікна;
MoveWindowзмінює розташування та розміри вікна. Для вікна верхнього рівня розташування знаходиться відносно лівого верхнього кута екрана. Для дочірнього вікна розташування розташоване відносно лівого верхнього кута клієнтської області батьківського вікна;
Openlconвідновлюєзгорнуте вікно;
SetWindowPlacementвстановлює стан показу і відновлює, згортає і розгортає вікно;
SetWindowTextкопіює текст рядка заголовка вікна (якщо воно має його) у буфер. Якщо вікно елемент керування, текст елемента керування копіюється;
ShowWindowвстановлює стан показу вікна;WindowFromPointшукає дескриптор вікна, яке містить задану точку.
Джерело: Сучкова, Л.І. Win32 API: основи програмування: навчальний посібник/Л.І. Сучкова; АлтДТУ ім. ІІ. Повзунова. -Барнаул, АлтГТУ, 2010. 138 с, іл.