- •1. Створення проекту додатку
- •2. Розроблення системи меню
- •2.1. Налаштування головного меню додатку
- •2.2. Створення контекстного меню
- •2.3. Визначення функцій-обробників повідомлень системи меню
- •2.4.Перевірка працездатності меню«Data»
- •2.4.Перевірка працездатності контекстного меню
- •3. Створення класу dbFacade
- •3.1.Заголовочний файл класу dbFacade
- •3.2.Файл реалізації класу dbFacade
- •3.3.Тестування класу dbFacade
- •4. Розроблення графічного представлення даних звітів
- •4.1. Функція CalcDocSizes( )
- •4.2. Функція OnDraw( )
- •4.3. Функція-обробник зміни шрифту
- •4.4. Функція-обробник зміни кольору фону
- •5. Додаткові елементи керування
- •5.1. Дублювання пунктів меню на панелі інструментів
- •5.2. Додавання назви звіту у рядок стану додатку
- •Висновок
- •Список рекомендованої літератури
2.2. Створення контекстного меню
Контекстне меню створеного додатку буде дублювати пункти меню «Data» головного меню. Щоб створити контекстне меню, необхідно на вкладці ResourceView у списку ресурсів натиснути правою кнопкою миші на папці Menu, вибрати команду Insert Menu і задати ідентифікатор для меню, наприклад, IDR_POPUP_MENU. Як вже зазначалося вище, всі пункти контекстного меню будуть дублювати відповідні пункти випадаючого меню, тому створюємо їх аналогічними до пунктів меню «Data». Створене меню має такий вигляд (рис.2.9):
Рис.2.9 - Контекстне меню
2.3. Визначення функцій-обробників повідомлень системи меню
Для того, щоб головне та контекстне меню функціонували, потрібно визначити функції-обробники для кожного створеного пункту меню. Для цього потрібно виконати команду View – ClassWizard. За допомогою цього майстра потрібно додати функцію-обробник для кожного пункту меню. У полі Project потрібно вибрати свій проект, у полі Class name – клас CCourseDoc (у цей клас будуть додаватися функції-обробники), у полі Object IDs – ідентифікатори пунктів меню. Наприклад, щоб додати функцію-обробник для пункту меню «Сотрудники», у полі Object IDs потрібно вибрати ідентифікатор ID_DATA_EMPLOYEE, у полі Messages – COMMAND (пункти меню генерують команди) і натиснути кнопку Add Function (рис.2.10):
Рис.2.10 - Вікно майстра MFC ClassWizard з доданими функціями-обробниками
Для інших пунктів меню функції-обробники додаються аналогічно, тільки для пунктів меню «Шрифт» та «Цвет фона» у полі Class name обираємо клас CCourseView (саме цей клас буде обробляти повідомлення). Таким же чином додається функція-обробник повідомлення WM_CONTEXTMENU для відкривання контекстного меню при натисканні правої кнопки миші у робочій області додатку. Зверніть увагу, що у полі Object IDs показано не ідентифікатор команди меню, а ім’я класу представлення (рис.2.11):
Рис.2.11 - Додавання функції-обробника повідомлення WM_CONTEXTMENU
2.4.Перевірка працездатності меню«Data»
Щоб пункти меню «Data» візуально працювали, як перемикач, у класі документу потрібно створити функцію, яка б малювала крапку біля вибраного пункту меню. Прототип цієї функції може бути наступним:
void setMenuRadio(UINT nItem);
Для цього потрібно клацнути правою кнопкою миші на імені класу CCourseDoc у вікні Workspace, і в контекстному меню вибрати пункт Add Member Function. При цьому з’явиться однойменне вікно, поля якого потрібно заповнити наступним чином (рис.2.12):
Рис.2.12 – Оголошення функції setMenuRadio
Після цього до оголошення класу буде додано прототип функції, а у файл реалізації класу – порожню реалізацію функції. Її потрібно змінити наступним чином:
void CCourseDoc::setMenuRadio(UINT nItem)
{
CMenu* pMenu = AfxGetMainWnd()->GetMenu();
pMenu->CheckMenuRadioItem(ID_DATA_EMPLOYEE,
ID_DATA_PROVIDERS,nItem,MF_BYCOMMAND);
}
Оскільки запити ще не працюють на даному етапі розроблення додатку, у функціях OnDataEmployee( ), OnDataProviders( ) та OnDataClients( ) класу CCourseDoc додамо код, який буде повідомляти про те, що запити ще не реалізовано, і виставляти крапку біля вибраного пункту меню (рис.2.13, 2.14), наприклад, для OnDataEmployee:
void CCourseDoc::OnDataEmployee()
{
// TODO: Add your command handler code here
MessageBox(NULL,"OnDataEmployee not yet implemented",
"Document", MB_OK);
setMenuRadio(ID_DATA_EMPLOYEE);
}
Для інших функцій код буде аналогічним.
Рис.2.13 - Вікно повідомлення
Рис.2.14 – Вигляд меню додатку