- •2.1.2 Обробка повідомлень
- •2.1.3 Таблиця повідомлень
- •2.1.4 Карти повідомлень
- •2.1.5 Макроси карт повідомлень
- •2.1.6 Функція MessageBox (ОкноСообщенія)
- •2.2 Хід виконання роботи
- •2.2.1 Створення пробного додатку
- •2.2.2 Додавання деталей проекту, створення повідомлень
- •2.3 Завдання до практичної роботи
2.2 Хід виконання роботи
2.2.1 Створення пробного додатку
Для наочної роботи з обробкою повідомлень і картами повідомлень заздалегідь необхідно створити простий діалоговий додаток. При створенні можна прибрати прапорець ActiveX Controls оскільки необхідності використовувати ActiveX об'єкти в даній практичній роботі немає, а програмний код стає простіше і наглядніше.
Після створення проекту відкриваємо файл з початковим кодом класу діалогового вікна і знаходимо початок карти повідомлень (макрос BEGIN MESSAGE MAP) (див. лістинг 2.1)
BEGIN MESSAGE MAP(CDialogAppDlg, CDialog)
//{{AFX MSG MAP(CDialogAppDlg)
ON WM SYSCOMMAND()
ON WM PAINT()
ON WM QUERYDRAGICON()
//}}AFX_MSG_MAP
END MESSAGE MAP()
Лістинг 2.1 - Автоматично створювана карта повідомлень діалогового додатку
2.2.2 Додавання деталей проекту, створення повідомлень
Тепер додамо на проект кнопку, клацнемо на ній правою кнопкою миші і виберемо пункт меню Events. З'явиться вікно додавання заголовків повідомлень і подій (див. Рис. 2.1).
Рис. 2.1 - Вікно додавання заголовків повідомлень і подій
В цьому вікні справа внизу знаходиться список класів і об'єктів, доступних для створення заголовків; зліва для кожного конкретного класу або об'єкту виводиться список доступних повідомлень або подій.
Вибираємо додану кнопку і для неї подія BN CLICKED - натиснення на кнопку. Після цього натискуємо на кнопку [Add and Edit] - виникне вікно створення функції-члена класу (див. Рис. 2.2), де можна змінити ім'я створюваної функції, яка буде викликатися при натисненні на кнопку.
Рис. 2.2 - Створення функції-члена класу
Після згоди з ім'ям функції автоматично відбудеться перехід до початкового коду програми в тому місці, де створена нова функція (див. лістинг 2.2)
void CDialogAppDlg::OnButton1()
{
// TODO: Add your control notification handler code here
}
Лістинг 2.2 - Нова функція обробки подій.
При додаванні нової функції обробки подій зміниться також карта обробки повідомлень, тепер вона буде виглядати наступним чином (див. лістинг 2.3).
BEGIN MESSAGE MAP(CDialogAppDlg, CDialog)
//{{AFX MSG MAP(CDialogAppDlg)
ON WM SYSCOMMAND()
ON WM PAINT()
ON WM QUERYDRAGICON()
ON BN CLICKED(IDC BUTTON1, OnButton1)
//}}AFX_MSG_MAP
END MESSAGE MAP()
Лістинг 2.3 - Карта повідомлень після додавання нової функції
Тепер в карті повідомлень з'явився макрос ON BN CLICKED, аргументами якого є системне ім'я кнопки і функція обробки, що викликається при натисненні на кнопку. Додайте в тіло створеної функції обробки строчку: MessageBox("You are clicked on BUTTON1","",MB OK);. Тепер при натисненні на кнопку буде з'являтися повідомлення (див. Рис. 2.3).
Рис. 2.3 - Створений додаток і повідомлення обробки події
Тепер створіть другу кнопку без створення для неї окремої функції обробки події натиснення і змінивши уручну карту повідомлень примусьте її виконувати ту ж функцію, що і перша (див. лістинг 2.4).
BEGIN MESSAGE MAP(CDialogAppDlg, CDialog)
//{{AFX MSG MAP(CDialogAppDlg)
ON WM SYSCOMMAND()
ON WM PAINT()
ON WM QUERYDRAGICON()
ON BN CLICKED(IDC BUTTON1, OnButton1)
ON BN CLICKED(IDC BUTTON2, OnButton1)
//}}AFX_MSG_MAP
END MESSAGE MAP()
Лістинг 2.4 - Змінена карта повідомлень