Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOMPP_Method.doc
Скачиваний:
4
Добавлен:
24.11.2019
Размер:
673.79 Кб
Скачать

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»

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