Створення та виконання однодокументної Windows-програми на «рідному» С++ з використанням бібліотеки MFC, страница 3

Опис виконання роботи

1. Створити однодокументну (SDI) програму odz3.

2.Передбачити змінні: CPoint Anchor; //початкова  точка

                                         Cpoint DrawTo; //кінцева точка.

                                         Cpoint OldPoint ;//попередня точка

       Ввести їх у якості елементів даних у клас Codz3View з доступом  protected.

3.  В класс Codz3View також додати метод MakeAllFlagsFalse().

У ньому на флаг встановити  false. Цей метод викликається із конструктора класа.

void CODZ3View::MakeAllFlagsFalse()

{

        bDrawRectangle=false;

}

Це призводить до вимикання всіх режимів малювання при запускі програми.

4. Викликати редактор меню та додати пункт меню Tools. Включити в нього підпункт: Rectangle.

5. Додати у панель інструментів відповідну підпункту меню кнопку

6. Зв’язати кнопку з пунктом меню. Для цього необхідно клацнути  двічі на кнопці Rectangle . У вікні  properties вибрати вікно ID та клацнути по ньому. З розкритого списку вибрати  ID_TOOLS_RECTANGLE. Це ідентифікатор меню Rectangle. Таким чинок, кнопка Rectangle зв’язується з вхідним пунктом меню.

       Нижче у поле prompt необхідно ввести Rectangle \n Rectangle. Це значить, що коли користувач затримає вказівник миші над даною кнопкою, у рядку стану з’явиться текст Rectangle . Крім того, текст за символом \n буде виведен у якості екранної підказки біля кнопки.

7. Створити обробник для пункту меню Rectangle. Спочатку необхідно викликати метод  MakeAllFlagsFalse() а потім присвоїти значення  true. Обробник має вигляд:

void CODZ3View::OnToolsRectangle()

{

        bDrawRectangle=true;

}

7.  Помітити команду меню.

Виділити пункт меню Rectangle, викликати контексне меню, а уньому Add Event Handler.  У вікні вибрати UPDATE_COMMAND_UI, а у списку Class list – Codz3View.

void CODZ3View::OnUpdateToolsRectangle(CCmdUI *pCmdUI)

{

        pCmdUI->SetCheck(bDrawRectangle);

}

8. Обробити повідомлення о натиснутій клавіші.  Натиснення лівої клавіші задає початкову точку для малювання фігури. Створити обробник події натиснення цієї кнопки.

Для цього вибрати Codz3View, викликати контекстне меню ->properties->messages. В списку вибрати  WM_LBUTTONDOWN. Клацнути по ньому. З’явиться  <Add>OnLButtonDown. Ще раз натиснути, що призведе до появи обробника.

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

{

        Anchor.x=point.x;

        Anchor.y=point.y;

        OldPoint.x=Anchor.x;

        OldPoint.y=Anchor.y;

CView::OnLButtonDown(nFlags, point);

}

9. Запрограмувати малювання прямокутника. Малювання відбувається при відпускання лівої кнопки миші. Додати обробник   

ОnLButtonUp(). Це робиться так як і у попередньому випадку.                                                                                           

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

{

        CODZ3Doc* pDoc=GetDocument();

        ASSERT_VALID(pDoc);

        DrawTo.x=point.x;

        DrawTo.y=point.y;

        CClientDC*pDC=new CClientDC(this);

        if(bDrawRectangle)

        {

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

                pDC->Rectangle(Anchor.x,Anchor.y,DrawTo.x,DrawTo.y);

                pDoc->pMetaFileDC->MoveTo(Anchor.x,Anchor.y);

        pDoc->pMetaFileDC->Rectangle(Anchor.x,Anchor.y,DrawTo.x,DrawTo.y);

}

        delete pDC;

        CView::OnLButtonUp(nFlags, point);

}

10. Забезпечемо оновлення зображення.    

       а) Включимо в заготовочний файл документа вказівник   pMetaFileDC на контекст пристрою метафайла, який буде використовуватися . Для цього виділити клас  Codz3Doc, викликати контекстне меню, Add Variable. Вказати тип змінної CMetaFileDC*   та ввести ім’я вказівника.