После этого можно старый метафайл заменить новым и удалить старый.В результате мы воспроизвели графическое изображение в клиентской области и создали новый метафайл для следующего обновления.
Примечание:
Если вы используете графические методы,возвращающие информацию о контексте устройства(например, сведения о высоте или ширине), то воспроизведение метафайла в другом контексте может быть неудачным (поскольку размеры не обязательно останутся прежними). Чтобы связать метафайл с контекстом устройства того типа, в котором он должен воспроизводиться, нужно использовать метод SetAttirDC() класса CMetaFileDC .
Изображение, находящееся в метафайле, можно сохранить на диске.
15) Сохранение графических файлов.
Используется метод CopyMetaFile() класса CMetaFileDC.
Связать обработчики с тремя командами меню File- New, Save и Open. Они будут создавать новый документ программы graf_painter, сохранять изображение в файле graf_painter.wmf ( это стандартное расширение для метафайлов) и загружать сохраненный ранее метафайл.
а) Открыть метод OnFileSave() и заполнить его.
void Cgraf_painterView::OnFileSave()
{
Cgraf_painterDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
HMETAFILE Nomer=pDoc->pMetaFileDC->Close();
CopyMetaFile(Nomer,"graf_painter.wmf");
CMetaFileDC*Newmetafile=new CMetaFileDC();
Newmetafile->Create();
Newmetafile->PlayMetaFile(Nomer);
DeleteMetaFile(Nomer);
delete pDoc->pMetaFileDC;
pDoc->pMetaFileDC=Newmetafile;
// TODO: Add your command handler code here
}
Как и в предыдущем случае, вначале закрыли метафайл, чтобы узнать его логический номер. Затем скопировали его на диск в файл graf_painter.wmf. Далее создается новый метафайл и воспроизводится в нем старый. Заменяется старый метафайл новым, после чего старый удаляется.
б) Заполнить обработчик, обеспечивающий загрузку графического файла.
Будет использоваться метод GetMetaFile().
void Cgraf_painterView::OnFileOpen()
{
Cgraf_painterDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
HMETAFILE Nomer=GetMetaFile("graf_painter.wmf"); //создается новый логический номер метафайла
CMetaFileDC*Newmetafile=new CMetaFileDC();
Newmetafile->Create();
Newmetafile->PlayMetaFile(Nomer);
DeleteMetaFile(Nomer);
delete pDoc->pMetaFileDC;
pDoc->pMetaFileDC=Newmetafile;
Invalidate();//Обеспечивает отображение нового метафайла в объекте вида программы
// TODO: Add your command handler code here
}
Как и раньше, по номеру создаем новый объект класса CMetaFileDC, воспроизводим в нем файл, загруженный с диска, заменяем старый метафайл новым. Метод Invalidate() обеспечивает отображение нового метафайла в объекте вида.
в) Заполнить обработчик , создающий новый документ.
Выбирая команду File -> New, пользователь хочет создать новый документ. Поэтому мы создаем пустой метафайл, устанавливаем его в своей программе и вызываем Invalidate() для его воспроизведения. Метод Invalidate() очищает окно вида, и пользователь может приступить к созданию нового изображения в пустом окне и в пустом метафайле.
void Cgraf_painterView::OnFileNew()
{
Cgraf_painterDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
CMetaFileDC*newMetaFile=new CMetaFileDC();
newMetaFile->Create();
delete pDoc->pMetaFileDC;
pDoc->pMetaFileDC=newMetaFile;
Invalidate();
// TODO: Add your command handler code here
}
3 Контрольные вопросы
1Как растянуть линию?
2 Что такое бинарные растровые операции?
3 Что такое метафайл и зачем он нужен?
4 Как воспроизвести метафайл?
5 Как сохранить графический файл?
6 Как открыть графический файл?
7 Как нарисовать прямоугольник?
8 Как создать новый документ?
Список литературы
1 С. Холзнер VISUAL C++ 6. Учебный курс, «Питер», Санкт-Петербург, Москва, Харьков, Минск, 2001г.
2 Айвор Хортон VISUAL C++ 2005 Базовый курс, «Диалектика», Москва, Санкт-Петербург, Киев , 2007г
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.