
- •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. Додавання назви звіту у рядок стану додатку
- •Висновок
- •Список рекомендованої літератури
4.2. Функція OnDraw( )
Ця функція використовується для того, щоб виводити звіти у клієнтську область додатку.
void CCourseView::OnDraw(CDC* pDC)
{
CCourseDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//Отримуємо покажчик на набір записів
CRecordset* pRs = &(GetDocument()->getRSet());
//Малюємо фон поточним кольором
pDC->FillSolidRect(0,0,sizeTotal.cx,
sizeTotal.cy,bkColor);
//Встановлюємо новий шрифт
CFont* pOldFnt = pDC->SelectObject(&fnt);
//Визначаємо колір шрифта
pDC->SetTextColor(textColor);
//Створюємо перо і встановлюємо його в контекст пристрою
CPen pen;
pen.CreatePen(PS_SOLID,1,textColor);
CPen* pOldPen = pDC->SelectObject(&pen);
int width;
CString temp;
//Визначаємо кількість полів у записі
int fields = pRs->GetODBCFieldCount();
int YCoord;
//Переходимо до першого запису
pRs->MoveFirst();
//Проходимо по всім записам
for(int i=0;i<recCount;++i)
{
width = 0;
//Вираховуємо зміщення по висоті
YCoord = i*textHeight;
width = 0;
//Проходимо по всім полям поточного запису
for(int j=0;j<fields;j++)
{
//Записуємо значення поля у тимчасову змінну
pRs->GetFieldValue(j,temp);
//Виводимо вміст поля у контекст пристрою
pDC->TextOut(width+offset,YCoord,temp);
//Пересуваємося до наступного стовпця
width += colWidths[j]+offset*2;
}//for
//Малюємо горизонтальну лінію
pDC->MoveTo(0,YCoord);
pDC->LineTo(sizeTotal.cx,YCoord);
//Переходимо до наступного запису
pRs->MoveNext();
}//for
YCoord = i*textHeight;
//Малюємо останню горизонтальну лінію звіту
pDC->MoveTo(0,YCoord);
pDC->LineTo(sizeTotal.cx,YCoord);
//Малюємо вертикальні лінії
width = 0;
for(i=0;i<fields;i++)
{
pDC->MoveTo(width,0);
pDC->LineTo(width,sizeTotal.cy);
//Переходимо до наступного стовпця
width += colWidths[i]+offset*2;
}
//Малюємо останню вертикальну лінію звіту
pDC->MoveTo(width,0);
pDC->LineTo(width,sizeTotal.cy);
//Відновлюємо старе перо в контексті пристрою
pDC->SelectObject(pOldPen);
//Відновлюємо старий шрифт в контексті пристрою
pDC->SelectObject(pOldFnt);
}
4.3. Функція-обробник зміни шрифту
Ця функція додається через ClassWizard, так як це вже було описано вище. Реалізована функція має наступний вигляд:
void CCourseView::OnViewFont()
{
// TODO: Add your command handler code here
//MessageBox("OnViewFont not yet implemented","View");
//Створюємо об’єкт типу CFontDialog
CFontDialog dlg;
//Якщо користувач натиснув кнопку «ОК»
if(IDOK == dlg.DoModal())
{
LOGFONT lf;
//Отримуємо шрифт користувача
dlg.GetCurrentFont(&lf);
//Видаляємо старий шрифт
fnt.DeleteObject();
//На базі логічного шрифту створюємо фізичний
fnt.CreateFontIndirect(&lf);
//Отримуємо колір шрифту
textColor = dlg.GetColor();
//Перераховуємо розмір звіту
CalcDocSizes();
//Налаштовуємо смуги прокрутки
SetScrollSizes(MM_TEXT, sizeTotal);
//Перемальовуємо звіт
this->Invalidate();
}
}
При натисканні на цьому пункті меню, відкривається вікно редагування шрифту (рис.4.2):
Рис.4.2 - Вікно «Font»