б) У конструктор 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. Коспект лекцій Авраменко В. В.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.