Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual1.doc
Скачиваний:
8
Добавлен:
07.03.2016
Размер:
4.35 Mб
Скачать

Розділ 2. Повідомлення і команди

2.1. Обробка повідомлень

Особливість, що відрізняє програмування в Windows від інших областей програмування, то це повідомлення. Наприклад, більшість DOS-програм, засновано на відстеженні можливих джерел надходження інформації, таких як клавіатура і миша, очікуючи введення від них. Програма, яка не стежить за мишею, не зможе реагувати на сигнали, які надходять від неї. Що ж стосується Windows-програм, то там все відбувається з точністю навпаки: програма керується повідомленнями. Повідомлення є тим засобом, за допомогою якого операційна система може дати знати додаткам, що сталася певна подія, наприклад користувач натиснув клавішу на клавіатурі або клацнув кнопку миші, або змінив положення миші, або підготував принтер до виведення інформації. Значну допомогу в організації роботи з повідомленнями надає MFC, приховуючи від програміста багато подробиць процесу.

Хоча операційна система і використовує цілі числа для ідентифікації подій, в тексті програми ми будемо мати справу з символьними ідентифікаторами. Директива #define пов'язує символьні ідентифікатори з відповідними числами. Дані ідентифікатори починаються з префіксу WM, наприклад WM_PAINT і WM_SIZE. Префікс WM означає Window Message (повідомлення Windows). Наведемо частковий перелік повідомлень:

#define WM_SETFOCUS 0x0007

#define WM_KILLFOCUS 0x0008

#define WM_ENABLE 0x000A

#define WM_SETREDRAW 0x000B

#define WM_SETTEXT 0x000C

#define WM_GETTEXT 0x000D

#define WM_GETTEXTLENGTH 0x000E

#define WM_PAINT 0x000F

#define WM_CLOSE 0x0010

#define WM_QUERYENDSESSION 0x0011

#define WM_QUIT 0x0012

#define WM_QUERYOPEN 0x0013

#define WM_ERASEBKGND 0x0014

#define WM_SYSCOLORCHANGE 0x0015

#define WM_ENDSESSION 0x0016

Обробка різних повідомлень виконується різними компонентами операційної системи та програми. Наприклад, коли користувач пересуває курсор по полю вікна, формується повідомлення WM_MOUSEMOVE, яке передається вікна, а вікно, у свою чергу, передає це повідомлення операційній системі. І вже остання перемальовує курсор миші в новому місці. Коли користувач клацає лівою кнопкою миші на екранній кнопці, кнопка, яка також є особливий вид вікна, отримує повідомлення WM_LBUTTONDOWN. У процесі обробки цього повідомлення кнопка часто формує нове повідомлення для вікна, в якому вона знаходиться, причому це повідомлення говорить: "На мені клацнули !".

Бібліотека MFC дозволяє програмістам в переважній більшості випадків повністю відсторонитися від повідомлень нижнього рівня, таких як WM_MOUSEMOVE і WM_LBUTTONDOWN. Програміст може повністю зосередитися на повідомленнях більш високого рівня, які свідчать що-небудь на приклад "Обрано третій елемент такого-то списку" або "Сталося клацання на кнопці Move". Надходять такого роду повідомлення в ті програми, які пише програміст, і в компоненти операційної системи точно так само, як і повідомлення нижнього рівня. Єдина різниця в тому, що MFC бере на себе значну частину роботи з обробки повідомлень низького рівня і дозволяє помітно полегшити розподіл повідомлень між різними класами об'єктів, на рівні яких і буде проводитися їх обробка. У програмах на мові С, які були створені за старою технологією, таке оголошення виконувалося на досить високому рівні взаємодії між власне мовою і системою Windows. При цьому у справу вступали різні засоби об'єктно-орієнтованого програмування, які дозволяли в максимальному ступені приховувати деталі виконуваних операцій всередині об'єктів.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]