здравствуйте коллеги.
столкнулся я со следующей проблемой и никак не могу ее решить уже неделю.
задача такая. у меня имеется 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. Оффтопик. — ХД