Механізм повідомлень у Windows.
Первинність даних, механізм повідомлень.
В ООП первинні дані називаються повідомленнями. Так само як і в Windows модель даних керуючись об’єктами реалізується за допомогою спеціального механізму повідомлень, більше повідомлень, які отримує об’єкт. Вікно виникає в результаті дій користувачів, але ідея повідомлень значно глибша. Повідомлення – потужний і єдиний засіб зв’язку вікна всього продукту з ОС Windows. Через повідомлення вікно отримує інформацію про всі події в системі Windows, які мають відношення до деякого вікна.
Саме механізм повідомлень дозволяє реалізувати багато віконне операційне середовище.
Приклад: взаємодія Windows та програмного продукту при обробці клавіш.
Драйвери клавіш викликають продукт в модуль user.exe, яка і формує відповідне повідомлення.
Повідомлення, яке розміщене в системній черзі розподіляється потім по продуктам. Для кожного продукту Windows створює і підтримує окрему чергу продукту. Розподілення полягає в тому, що повідомлення береться із системної черги і визначає, якому вікну належить дане повідомлення і це повідомлення розміщується в чергу продукту, якому належить вікно. Цю роботу виконує user.exe, а обробка черги продукту виконує сам продукт, який бере повідомлення з черги, перетворюючи їх в повідомлення стандарту ansi і направляє у відповідну функцію вікна продукту. І конкретні дії по даному повідомленню робляться функцією вікна. Як Windows визначає якому продукту направляти повідомлення, оскільки багатозадачна система, але один користувач в кожен конкретний момент часу працює тільки з одним вікном. Продукт, що попадає в повідомлення від клавіш має в цей момент фокус вводу.
Системна черга є тим засобом, який розподіляє повідомлення по продукту, але якщо заздалегідь відомо, якому продукту належить те або інше повідомлення, то воно одразу розміщується в чергу продуктів повз системну чергу. Таким чином в Windows в повній мірі реалізована основна ідея ООП. Дані керуються об’єктами, тобто функціями вікна Windows. Windows – продукт створивши вікно і приготувавши середовище, продукт передає керування Windows і надалі до завершення роботи продукт отримає керування від Windows тільки після приходу повідомлень, які належать даному продукту.
Створивши вікно продуктів програма WinMain організовує цикл повідомлень. Основним призначенням обробки черги повідомлень даного продукту, яке створює і підтримує Windows. Повідомлення, які розміщуються в Windows в черзі продуктів беруться з черги циклом обробки повідомлень і направляються не на пряму, а через Windows в функцію керування відповідним вікном продукту. Чому не можна викликати функцію вікна на пряму? Тому, що це протиречить прийнятій технології. Windows – об’єкти спілкуються між собою тільки шляхом повідомлень.
Після того як WinMain виконує організацію дії викли вікон можливий шляхом передачі повідомлень. Цикл обробки повідомлення Message бере повідомлення і відправляє у ф. вікно. Ця функція вміщує команди що виконують реальні дії, а саме виконання команд менб продуктів, виконує вивід у вікні граф і тексту що відносяться власнедо продукту. Не всі мовідомлення попадають у ф. вікна продукту через цикл обробки повідомлень.
WINMain
Цикл обробки повідомлень
WinProc
Windows продукт
WМ-Destroy
Системна черга
Черга продукту
Вікно продукту
Вхід
Windows
Вихід
WМ - Вихід
Повідомлення вікна Wind безпосередньо у ф. вікна прод.
Недоліки: якщо користувач закрив вікно, то форм повідомлень WM-DESTROY і закрив вікно. Воно відразу направлено у ф. вікна продукту. Після виконання необхідних операцій: звільнити пам*ять, вилучити об. Ф. вікна прад повинна повідомити головній ф. WinMain про те що вікно закрите і продукт має завершує свою роботу.
WndProc форм WM-Quit і передає в чергу продукту. Коли цикл обробки повідомлення бере з черги прод це повідомлення відбув вихід з циклу обробки повід і продукт завершення роботу. Windows продукт не звертає зо буферу клавіатури. Всі символи що вводять з клави. Windows розміщує в системчергу.Ввід відбувається копіювання введеного символа з системної черги в чергу прод і він таким чином бере весь свій ввід зі своєї черги що також автоматично підтримує Wind. Спілкування відбувається через системну чергу продукту. Таким чином Windows не треба створити цикл опросу клави або створює свій обробник переривань миші. При пуску певного прод Wind автоматично створює ще одну чергу повід, куди буде направлений всі повідомлення для цього продукту.
Повідомлення Windows дуже різноманітна діляться на :
Системні повідомлення
Повідомлення керування вікнами
Повідомлення багатовіконних інтерфейсів
Повідомлення миші і клави
Завдячуючи багатозадачносиі Windows можна один продукт стеж за повідомл що ВІНДА розміщує в черзі інших прод що був корисний при відладці програми.