Шаг 102 - Создаем WMF файл

Итак, дошла очередь и до WMF. Что эа такое WMF файлы ? Работая с графикой рано или позно у Вас возникнет задача в передаче информации от одной программы к другой. Существует большое количество стандартов, например, DXF. Для его использования необходимо тщательно изучить стандарт и реализовать его поддержку. Существуют и другие стандарты. Но изучение стандартов это дела долгое. Что делать еcли надо, чтобы ваша программа могла быстро и с наименьшими трудностями для Вас сохранить данные. Для этого нужно воспользоваться стандартом Windows - WMF. На Ваш вопрос о том, чем он отличается от DXF, например, я могу сказать, что стандарта WMF практически нет :-)). То есть так же как вы рисуете с помощью GDI теми же командами и пишите в WMF файл. Информация в файле будет векторная. WMF - это список структур, которые содержат информацию о вызове GDI функций. Ладно на примере думаю будет понятно :-)

Создаем приложение как MFC AppWizard с именем WmfTest, как SDI и нажимаем Finish. Теперь создадим функцию рисования в OnDraw.

/////////////////////////////////////////////////////
// CWmfTestView drawing

void CWmfTestView::OnDraw(CDC* pDC)
{
	CWmfTestDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	CPen pen(PS_SOLID,4,RGB(255,0,0));
	pDC->SelectObject(pen);
	pDC->Ellipse(CRect(10,10,100,100)); 
	pDC->Rectangle(CRect(150,150,300,300)); 

}
Запустим программу и посмотрим.

102_1.gif (4921 b)

Для записи в WMF файл создадим функцию реакции на нажатие левой кнопки мыши в окне. То есть нажали кнопку мыши информация в WMF файл записалась.

///////////////////////////////////////////////////////
// CWmfTestView message handlers

void CWmfTestView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	HDC MetaDC;
	MetaDC=CreateMetaFile("test.wmf");
	if (MetaDC!=NULL)
	{
         CPen pen(PS_SOLID,4,RGB(255,0,0));
	 SelectObject(MetaDC,pen);
	 Ellipse(MetaDC,10,10,100,100); 
	 Rectangle(MetaDC,150,150,300,300); 
	}
	CloseMetaFile(MetaDC);
	CView::OnLButtonDown(nFlags, point);
}

Смотрите, создаем контекст метафайла HDC MetaDC, после этого сам метафайл CreateMetaFile("test.wmf") и теперь мы используя контекст метафайла и функции GDI из API !!! спокойно в этот контекст пишем. В конце закрываем метафайл. Готов !.

А теперь проверяем. Запустите приложение. Щелкните левой кнопкой. И экспортируйте файл test.wmf в Corel Draw 8.0. Рисунок будет маленький. Увеличьте его. Разгруппируйте Ungroup. Щелкните в стороне. Теперь это два векторных объекта. На рисунке ниже я специально переместил один узел, чтобы это показать.

102_2.gif (4608 b)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.