изменение размера emf и его принтинг
От: overdose  
Дата: 09.06.03 12:46
Оценка:
здравствуйте коллеги.
столкнулся я со следующей проблемой и никак не могу ее решить уже неделю.
задача такая. у меня имеется emf определенного размера. мне надо этот размер изменить (уменьшить например), а потом распечатать этот файл на принтере. все получается как бы. размер emf Меняю. отсылаю его на принтер. но после распечатки вижу следующее: emf печатается два раза. первый раз в том размере, что мне надо. и второй раз-расстянутый на весь лист. вернее наоборот. сначала расстянутый на весь лист, а потом сверху наложенный нормального размера, как мне надо.
ниже приведу код, который я юзаю.

меняю размер emf
HDC c=GetDC(NULL);

HDC hEmfDC=::CreateEnhMetaFile(c, 0, &rc, "temp"); //rc содержит новый размер emf
CMetaFileDC* dc=new CMetaFileDC;
::SetMapMode(hEmfDC, MM_HIMETRIC);
dc->Attach(hEmfDC);
dc->SetMapMode(MM_HIMETRIC);
rc.top=-rc.top;
rc.bottom=-rc.bottom;

::PlayEnhMetaFile(dc->GetSafeHdc(),phEmf,&rc)
DeleteEnhMetaFile(phEmf);
phEmf=dc->CloseEnhanced(); //получаю тут новый emf

ZeroMemory(&emh, sizeof(ENHMETAHEADER));
emh.nSize=sizeof(ENHMETAHEADER);
GetEnhMetaFileHeader(phEmf,sizeof(ENHMETAHEADER),&emh);
::SetRect(&rc,emh.rclFrame.left,emh.rclFrame.top,emh.rclFrame.right,emh.rclFrame.bottom);

CloseEnhMetaFile(hEmfDC);
dc->Detach();
delete dc;


теперь посылаю Emf на печать на принтер
if(_printerDC.StartPage()<0)
{
 _printerDC.AbortDoc();
}
else
{
 _printerDC.SetMapMode(MM_HIMETRIC);
 _printerDC.SetViewportOrg(0, 0);
 _printerDC.SetViewportOrg(-_printerDC.GetDeviceCaps(PHYSICALOFFSETX),
          -_printerDC.GetDeviceCaps(PHYSICALOFFSETY));
 ::PlayEnhMetaFile(_printerDC.GetSafeHdc(), phEmf, &rc);
_printerDC.EndPage();
}
 DeleteEnhMetaFile(phEmf);
}
 _printerDC.EndDoc();


вот в принципе и весь код.
расскажите плз, в чем проблема, а то я уже запарился

09.06.03 22:41: Перенесено модератором из 'C/C++' в WinAPI. Оффтопик. — ХД
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.