Печать
От: valden Украина http://ua.linkedin.com/in/dvalchuk
Дата: 14.11.03 13:04
Оценка:
Трабла вот в чём...
печатаю текст по странице А4 или А5 — соответственно...
Печатаю я печатаю ... — типа всё ок...
И тут решил попробовать на удалённом принтере...
получились грабли
Размер листа типа уменьшился раза в 4 ((
Эффект кароче тотже как будто я задал размер бумаги дето А8 -(если такой есть канешна )

void CPrintWin32::PrintTxt(char* str,long xx,long yy,unsigned long style,long sz,const char * fml)
{
    int fnWeight=100;
    DWORD m_bItalic=FALSE;
    if(style & style_bold)
        fnWeight=700;
    if(style & style_italic)
        m_bItalic=TRUE;
    long height = -MulDiv(sz, GetDeviceCaps(m_hPrintDC,LOGPIXELSY), 72);
            
    HFONT m_hFont = CreateFont(height,///height
        0,///weight
        0,///standart {naklon stroki}
        0,///standart {naklon osi bukv}
        fnWeight,///bold
        m_bItalic,///italic
        FALSE,///standart {pod4erk}
        FALSE,///standart {pere4erk}
        RUSSIAN_CHARSET,//DEFAULT_CHARSET ,
        OUT_DEFAULT_PRECIS,///standart 
        CLIP_DEFAULT_PRECIS,///standart 
        DRAFT_QUALITY,///standart 
        DEFAULT_PITCH | FF_MODERN,///standart
        LPCTSTR(fml));///name 
    if (!m_hFont)
    {
        return ;
    }
    
    RECT m_PageRect;
    m_PageRect.left =xx;
    m_PageRect.top  = yy;
    m_PageRect.right = GetDeviceCaps (m_hPrintDC, PHYSICALWIDTH) - 
        GetDeviceCaps (m_hPrintDC, PHYSICALOFFSETX);
    m_PageRect.bottom = GetDeviceCaps (m_hPrintDC, PHYSICALHEIGHT) - 
        GetDeviceCaps    (m_hPrintDC, PHYSICALOFFSETY);
    

    
    HFONT hOldFont = (HFONT)SelectObject(m_hPrintDC, m_hFont);
    
    DrawText(m_hPrintDC, 
        str, 
        strlen(str),
        &m_PageRect,
        DT_LEFT);
    
    
    SelectObject(m_hPrintDC, hOldFont);

    DeleteObject(m_hFont);
}


Это код функции вывода текста...
С уважением Denys Valchuk

IMHO чем больше мнений тем оптимальней выбор варианта... :)
Re: Печать
От: Patalog Россия  
Дата: 14.11.03 15:19
Оценка:
Здравствуйте, valden, Вы писали:

[]

Показывай как контекст создаешь (m_hPrintDC).
Почетный кавалер ордена Совка.
Re[2]: Печать
От: valden Украина http://ua.linkedin.com/in/dvalchuk
Дата: 14.11.03 20:44
Оценка:
Здравствуйте, Patalog, Вы писали:

P>Здравствуйте, valden, Вы писали:


P>[]


P>Показывай как контекст создаешь (m_hPrintDC).



CPrintWin32::CPrintWin32(char * docname)
{
    PrintSetup();
    DOCINFO docInfo;
    memset( &docInfo, 0, sizeof(DOCINFO) );
    docInfo.cbSize = sizeof(DOCINFO);
    docInfo.lpszDocName = (LPCSTR)docname;
    docInfo.lpszOutput = NULL;
    docInfo.lpszDatatype = NULL;
    docInfo.fwType = 0;
    if (!StartDoc(m_hPrintDC, &docInfo))
    {
        return ;
    }
}

CPrintWin32::~CPrintWin32()
{
    EndDoc(m_hPrintDC);
    DeleteDC(m_hPrintDC);
}

void CPrintWin32::PrintSetup()
{
    PRINTDLG pdlg;       
    memset( &pdlg, 0, sizeof( PRINTDLG ) );
    pdlg.lStructSize = sizeof( PRINTDLG );
    pdlg.Flags = PD_ALLPAGES           | 
        PD_DISABLEPRINTTOFILE |
        PD_NOPAGENUMS       |
        PD_NOSELECTION;
    
    BOOL bResult = FALSE;
    if (PrintDlg( &pdlg ))
    {
        DEVNAMES*    pDevNames =  (DEVNAMES*)GlobalLock(pdlg.hDevNames);
        DEVMODE*    pDevMode  =  (DEVMODE*)GlobalLock(pdlg.hDevMode);
        pDevMode->dmSize           = sizeof( DEVMODE);
        pDevMode->dmOrientation = DMORIENT_PORTRAIT ;
        m_hPrintDC = CreateDC((LPCTSTR)pDevNames + pDevNames->wDriverOffset,
            (LPCTSTR)pDevNames + pDevNames->wDeviceOffset,
            (LPCTSTR)pDevNames + pDevNames->wOutputOffset,
            pDevMode);
        if (m_hPrintDC)
        {
            m_k = (pDevMode->dmPaperSize == DMPAPER_A4)?(1.4):(1);
            SetMapMode(pdlg.hDC, MM_TEXT);
            bResult = TRUE;
        }
    }
    GlobalFree(pdlg.hDevMode);
    GlobalFree(pdlg.hDevNames);
}
С уважением Denys Valchuk

IMHO чем больше мнений тем оптимальней выбор варианта... :)
Re[2]: Печать
От: valden Украина http://ua.linkedin.com/in/dvalchuk
Дата: 14.11.03 20:57
Оценка:
Здравствуйте, Patalog, Вы писали:

P>Здравствуйте, valden, Вы писали:


P>[]


P>Показывай как контекст создаешь (m_hPrintDC).


Кстати!
оказалось что при переходе на другой принтер — та же история
Хоть шрифт остаётся тем же...
С уважением Denys Valchuk

IMHO чем больше мнений тем оптимальней выбор варианта... :)
Re[3]: Печать
От: Patalog Россия  
Дата: 17.11.03 13:28
Оценка:
Здравствуйте, valden, Вы писали:

[]

А dmFields кто заполнять будет?

Specifies whether certain members of the DEVMODE structure have been initialized. If a member is initialized, its corresponding bit is set, otherwise the bit is clear.


pDevMode->dmFields |= DM_ORIENTATION | DM_PAPERSIZE;
Почетный кавалер ордена Совка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.