- •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.4.Перевірка працездатності контекстного меню
Щоб перевірити працездатність контекстного меню, потрібно виконати декілька дій. По-перше, до класу представлення потрібно додати закриту змінну-член класу CMenu. Для цього потрібно клацнути правою кнопкою миші на імені класу CCourseView у вікні Workspace, і в контекстному меню вибрати пункт Add Member Variable. При цьому з’явиться однойменне вікно, поля якого потрібно заповнити наступним чином (рис.2.15):
Рис.2.15 – Додавання змінної-члена класу
Далі потрібно змінити конструктор класу наступним чином, щоб завантажити меню із ресурсів:
CCourseView::CCourseView()
{
// TODO: add construction code here
ASSERT(myPopupMenu.LoadMenu(IDR_POPUP_MENU));
}
Після цього потрібно реалізацію функції-обробника OnContextMenu() привести до наступного вигляду:
void CCourseView::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
CMenu* pSubMenu = myPopupMenu.GetSubMenu(0);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
}
Після цього контекстне меню можна викликати, клацнувши правою клавішею миші у вікні додатку (рис.2.16):
Рис.2.16 – Контекстне меню додатку
На цьому етапі виконання курсової роботи було створено випадаюче меню «Data» у головному меню додатка з пунктами «Сотрудники», «Клиенты» та «Поставщики», за допомогою яких будуть виводиться відповідні звіти з таблиць бази даних; модифіковано меню «View» за допомогою додавання пунктів «Шрифт» та «Цвет фона»; а також створено контекстне меню додатку аналогічне до меню «Data». За допомогою майстра ClassWizard було створено функції-обробники повідомлень.
3. Створення класу dbFacade
Наступним етапом розроблення додатку є додавання класу DBFacade. Шаблон Facade дозволяє приховати складність системи шляхом зведення всіх викликів до одного об’єкту, який делегує їх відповідним об’єктам системи. Простіше кажучи, Faсade – об’єкт, який забезпечить зв’язок з базою даних та виконання запитів до таблиць бази даних для формування звітів і приховає від користувача складну систему взаємодії компонентів додатка та бази даних.
Для того, щоб додати новий клас до проекту, на вкладці ClassView клацаємо правою кнопкою миші, обираємо команду New Class, у вікні (рис.3.1), яке з’явилося обираємо Generic Class, у полі Name вводимо назву майбутнього класу DBFacade, поле Base class залишаємо незмінним, і натискаємо кнопку «ОК»:
Рис3.1 - Вікно New Class
3.1.Заголовочний файл класу dbFacade
Після створення класу за допомогою майстра, оголошення класу DBFacade потрібно привести до наступного вигляду (коментарі всередині тексту):
//Використовуємо клас vector із бібліотеки STL
#include <vector>
//Використовуємо стандартний простір імен
using namespace std;
class DBFacade
{
public:
//Повертає посилання на набір записів
CRecordset& getRSet();
//Повертає заголовок запиту
CString getTitle();
//Конструктор і деструктор
DBFacade();
virtual ~DBFacade();
//Визначає стани, у яких може знаходитися об’єкт класу
enum State{stEmployee,stClients,stProviders} state;
//Встановлює стан об’єкту класу
void setState(DBFacade::State st);
//Повертає стан об’єкту класу
DBFacade::State getState();
private:
//Відкриває набір записів
void openRSet();
//Змінні, за допомогою яких виконуються запити до бази даних
CRecordset rs;
CDatabase db;
//Структура зберігає заголовок і текст запиту
struct Query
{
CString strTitle;
CString strQuery;
};
//Масив структур із запитами
vector <Query> queries;
};