Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Стандартний цикл обробки повідомлень




Windows – це ОС, що базується на повідомленнях. Підсистема обміну повідомленнями є ядром ОС, тому знання механізму обробки повідомлень допоможе краще зрозуміти роботу систему та ефективно керувати прикладними програмами. Підхід до побудови програм на основі повідомлень вперше був застосований в ОС для комп’ютерів Macintosh. Він ґрунтується на тому, що поведінка (реакція) програми визначається зовнішніми подіями (повідомлення). Цей факт добре перекликається з концепцією об’єктно-орієнтованого програмування. Тому програмування для Windows за своєю суттю є об’єктно-орієнтованим, навіть якщо використовуються не об’єктно-орієнтовані мови.

Windows – програма складається з множини об’єктів, що обмінюються між собою повідомленнями. Основним об’єктом на якому базується механізм повідомлень є вікно. Воно першим появляється при запуску програми та останнім зникає при її завершенні. В процесі роботи програми ОС повідомляє прикладній програмі, точніше її вікну, про якусь подію за допомогою повідомлення, яке описує зміни, що відбулися в середовищі яке оточує програму. Механізм повідомлень, також єдиний спосіб “спілкування програми зі своїми вікнами. Обмін повідомленнями відбувається через ОС, яка отримавши повідомлення доставляє його відповідному об’єкту (вікну).

Кожне повідомлення зв’язується з певним вікном. З кожним повідомленням у вікні зв’язана програма, що реагує на нього – обробник повідомлень. Кожне повідомлення ОС розміщає в первинну чергу повідомлень з якої повідомлення розподіляються між об’єктами. В Win32 (на відміну від Win16, де існує тільки черга) може створюватися черга повідомлень для кожного процесу а також потоку, що позитивно позначається на швидкості та надійності виконання програм. В межах вікна існують механізми обміну повідомленнями, які дозволяють обійти загальну чергу повідомлень, що розвантажую загальну чергу та пришвидшує виконання прикладних програм.

До загальних функцій розсилання повідомлень відносяться:

SengMessage() – посилає повідомлення об’єктові на пряму та очікує його опрацювання (синхронний обмін);

PostMessage() – посилає повідомлення в чергу та завершується (синхронний обмін).

Варто зауважити, що функція SengMessage() дещо обходить механізм обміну повідомленнями ОС Windows.

Стандартний цикл обробки повідомлень в основній функції програми має вигляд:

 

while (GetMessage(&msg, NULL, 0, 0)) {

TranslateMessage(&msg);

DispatchMessage(&msg);

}

 

Цей цикл працює протягом всього часу роботи програми. Кожна ітерація – це видобування одного повідомлення з черги повідомлень біжучого потоку, за що відповідає функція GetMessage(), другий аргумент котрої (NULL) вказує, що обробляються повідомлення для всіх вікон. Третій та четвертий параметри задають фільтр повідомлень (min, max). Вибране повідомлення помішається в спеціальну структуру MSG:

 

typedef struct tagNSG {

HWND hWnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG;

 

де hWnd – (дескриптор) логічний номер вікна, якому адресується повідомлення; message – ідентифікатор (номер) повідомлення; wParam і lParam – додаткові дані повідомлення, їх наповнення залежать від типу повідомлення; time - час посилання повідомлення; pt - положення курсору миші в час посилання повідомлення.

Функція TranslateMessage() призначена для перетворення віртуальних кодів клавіатури в ASCII – коди, що дозволяє розрізняти великі та малі літери без додаткового аналізу стану клавіш регістру.

Функція DispatchMessage() призначена для передачі повідомлення у відповідну віконну процедуру для обробки.

Функція GetMessage() завжди повертає істинне значення окрім одного випадку. Прийнявши повідомлення WM_QUIT вона завершується з кодом FALSE і цикл завершується.

Отже цикл обробки повідомлень є основою будь-якої програми Windows.

 




Поделиться с друзьями:


Дата добавления: 2013-12-14; Просмотров: 1010; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.