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

2.4 Помітка команд меню.

За допомогою ClassWizard зв’яжіть з кожною командою меню метод оновлення, а в ньому необхідно помітити команду меню в залежності від значення прапорця.

void CPainterView::OnUpdateToolsEllipse(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here

pCmdUI->SetCheck(bEllipseFlag);

}

void CPainterView::OnUpdateToolsFillfigure(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here

pCmdUI->SetCheck(bFillFlag);

}

void CPainterView::OnUpdateToolsLine(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here

pCmdUI->SetCheck(bLineFlag);

}

void CPainterView::OnUpdateToolsRectangle(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here

pCmdUI->SetCheck(bRectangleFlag);

}

1.5 Обробка повідомлення про натиснення кнопки миші.

Якщо користувач натискає кнопку миші в клієнтській області програми, це значить, що він збирається малювати, а отже необхідно запам’ятати початкову точку. Для цього за допомогою ClassWizard необхідно додати метод:

void CPainterView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

Anchor.x=point.x;

Anchor.x=point.y;

CView::OnLButtonDown(nFlags, point);

}

1.6 Малювання ліній.

Лінія малюється при відпускані кнопки миші тому додайте в програму метод:

void CPainterView::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CView::OnLButtonUp(nFlags, point);

}

При відпусканні кнопки миші користувач задає положення кінцевої точки. ЇЇ необхідно запам’ятати:

void CPainterView::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

DrawTo.x=point.x;

DrawTo.y=point.y;

CView::OnLButtonUp(nFlags, point);

}

У звичайній програмі ми б занесли необхідну інформацію у спеціальні змінні і потім викликали б Invalidate(), щоб все малювання відбувалось в методі OnDraw(). Але в нашому випадку це не бажано. До поточної лінії користувач міг намалювати багато фігур, так що програмі прийшлось би запам’ятовувати все, що було до цього часу і відтворювати зображення в методі OnDraw() при додавання нових фігур.

Ми будемо оновлювати вміст вікна за допомогою мета файлів. Для цієї мети використовується клас CClientDC.

void CPainterView::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

DrawTo.x=point.x;

DrawTo.y=point.y;

CClientDC* pDC=new CClientDC(this);

CView::OnLButtonUp(nFlags, point);

}

Тепер можна малювати. Впевнимося, що необхідно малювати лінію:

void CPainterView::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

DrawTo.x=point.x;

DrawTo.y=point.y;

CClientDC* pDC=new CClientDC(this);

if(bLineFlag)

{

}

CView::OnLButtonUp(nFlags, point);

}

Для малювання спочатку перемістимося у початкову точку за допомогою методу MoveTo(), а потівм намалюємо лінію до кінцевої точки методом LineTo();

void CPainterView::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

DrawTo.x=point.x;

DrawTo.y=point.y;

CClientDC* pDC=new CClientDC(this);

if(bLineFlag)

{

pDC->MoveTo(Anchor.x, Anchor.y);

pDC->LineTo(DrawTo.x,DrawTo.y);

}

CView::OnLButtonUp(nFlags, point);

}