Здравствуйте, overdose, Вы писали:
[]
O>не могли бы вы пояснить свою мысль? в коде я написал, что в методе PlayEnhMetaFile я передаю RECT с нужными размерами. контекст принтера у меня настроен на работу с форматом А4. после принтинга я имею то, что имею.
Убрать эти танцы с бубном вокруг создания нового метафайла etc., а сразу отправлять его (исходный) на печать.
HWND desktop = GetDesktopWindow();
HDC dc = GetDC(desktop);
//Create metafile. You don't need to do that because you alraedy have it.
RECT rc_meta = { 0, 0, 5000, 5000 }; //..specifies the dimensions (in .01-millimeter units)
HDC meta_dc = CreateEnhMetaFile(dc, "C:\\Temp\\1.emf", &rc_meta, "");
_ASSERTE(meta_dc);
MoveToEx(meta_dc, 50, 50, NULL);
LineTo(meta_dc, 150, 150);
SetTextColor(meta_dc, RGB(0, 0, 0));
std::string text = "Sample text";
TextOut(meta_dc, 0, 0, text.c_str(), text.size());
/*
Other draw stuff
*/
HENHMETAFILE meta_file = CloseEnhMetaFile(meta_dc);
_ASSERTE(meta_file);
//print metafile
PRINTDLG pd = { sizeof(pd) };
pd.Flags = PD_RETURNDC;
BOOL res = PrintDlg(&pd);
if(res)
{
HDC print_dc = pd.hDC;
DOCINFO di = { sizeof(di), "Sample EMF printing" };
int job_id = StartDoc(print_dc, &di);
_ASSERTE(job_id > 0);
int ret = StartPage(print_dc);
_ASSERTE(ret > 0);
RECT rc_clip = { 0 }; //Set dimensions you need (in logical units)
GetClipBox(print_dc, &rc_clip);
PlayEnhMetaFile(print_dc, meta_file, &rc_clip);
EndPage(print_dc);
EndDoc(print_dc);
}
DeleteEnhMetaFile(meta_file);
ReleaseDC(desktop, dc);