Віконні повідомлення та функції роботи з вікнами

Вікно ідентифікується задескриптором вікна.Цей дескриптор (змінна типу 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 с, іл.