C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 102 - Создаем WMF файл / MFC шаг за шагом / Visual C++

Шаг 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)


Загрузить проект | | |
Автор Каев Артем.
[AD]