Re[3]: изменение размера emf и его принтинг
От: Patalog Россия  
Дата: 10.06.03 06:35
Оценка:
Здравствуйте, 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);
Почетный кавалер ордена Совка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.