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

б) У конструктор  Codz3Doc() додати виділення пам’яті та виклик методу Create() для створення нового об’єкта.   

Cgraf_painterDoc::Cgraf_painterDoc()

: pMetaFileDC(NULL)

{

        pMetaFileDC=new CMetaFileDC();

        pMetaFileDC->Create();

        // TODO: add one-time construction code here

}

У результаті створений контекст приладу для метафайлу, в якому будуть дублюватися всі дії користувача.

в) Запрограмувати у функції OnDraw()оновлення зображення. Фактично задача зводиться до відтворення метафайлу.

void CODZ3View::OnDraw(CDC* pDC)

{

        CODZ3Doc* pDoc = GetDocument();

        ASSERT_VALID(pDoc);

        if (!pDoc)

                return;

        HMETAFILE Nomer=pDoc->pMetaFileDC->Close();

        pDoc->pMetaFileDC->PlayMetaFile(Nomer);

        CMetaFileDC* New_metafile=new CMetaFileDC();

        New_metafile->Create();

        New_metafile->PlayMetaFile(Nomer);

        DeleteMetaFile(Nomer);

        delete pDoc->pMetaFileDC;

        pDoc->pMetaFileDC=New_metafile;

}

11.  Збереження графічних файлів.

Використовується метод CopyMetaFile()  класса CMetaFileDC.

       Зв’язати обробник з трьома пунктами меню File- New, Save  и Open. Вони будуть створювати новий документ програми  graf_painter, зберігати зображення у файлі graf_painter.wmf  ( це стандартне розширення метафайлів) и загружати збережений раніше метафайл.

а) Відкрити метод  OnFileSave() и заповнити його.

void CODZ3View::OnFileSave()

{

        CODZ3Doc* pDoc=GetDocument();

        ASSERT_VALID(pDoc);

        HMETAFILE Nomer=pDoc->pMetaFileDC->Close();

CopyMetaFile(Nomer,"odz3.wmf");

CMetaFileDC*Newmetafile=new CMetaFileDC();

        Newmetafile->Create();

        Newmetafile->PlayMetaFile(Nomer);

        DeleteMetaFile(Nomer);

        delete pDoc->pMetaFileDC;

        pDoc->pMetaFileDC=Newmetafile;

}

б)  Заповнимо обробник, що забезпечує загрузку графічного файлу. Будемо використовувати метод  GetMetaFile().

voidCODZ3View::OnFileOpen()

{

CODZ3Doc* pDoc=GetDocument();

ASSERT_VALID(pDoc);

        HMETAFILE Nomer=GetMetaFile("odz3.wmf");

        CMetaFileDC*Newmetafile=new CMetaFileDC();

        Newmetafile->Create();

        Newmetafile->PlayMetaFile(Nomer);

        DeleteMetaFile(Nomer);

        delete pDoc->pMetaFileDC;

        pDoc->pMetaFileDC=Newmetafile;

Invalidate();

}

в)  Заповнимо обробник, що створює новий документ.

void CODZ3View::OnFileNew()

{

        CODZ3Doc* pDoc=GetDocument();

        ASSERT_VALID(pDoc);

        CMetaFileDC*newMetaFile=new CMetaFileDC();

        newMetaFile->Create();

        delete pDoc->pMetaFileDC;

pDoc->pMetaFileDC=newMetaFile;

        Invalidate();

}

12. Наша програма готова.

Результати роботи програми

Висновки

В результаті виконання ОДЗ були покращені навички роботи з Visual C++ та бібліотекою MFC: створення однодокументних програм, програм з діалоговими вікнами, графікою та метафайлами отриманими під час навчання.

Список літератури

1 . С. Холзнер VISUAL C++ 6. Учебный курс, «Питер», Санкт-Петербург, Москва, Харьков, Минск, 2001г.

2 . Айвор Хортон  VISUAL C++ 2005 Базовый курс, «Диалектика», Москва, Санкт-Петербург, Киев , 2007г

3. Сергеев А.П., Терен А.Н. Программирование в VISUAL C++ 2005 «Диалектика», Москва*Санкт-Петербург*Киев , 2006г.

4. Коспект лекцій  Авраменко  В. В.