WIN32 Print


HDC GetPrinterDC()
{
    PRINTDLG prtDlg;
    ZeroMemory( & prtDlg, sizeof( PRINTDLG ));
    prtDlg.lStructSize = sizeof( PRINTDLG );
    prtDlg.Flags = PD_RETURNDEFAULT | PD_RETURNDC;

    ::PrintDlg( & prtDlg );
    
    return prtDlg.hDC;
}

void InitDocinfo( DOCINFO * pDi, LPCTSTR lpDocName )
{
    ZeroMemory( pDi, sizeof( DOCINFO ));
    pDi->cbSize = sizeof( DOCINFO );
    pDi->lpszDocName = lpDocName;
}

DWORD WINAPI StartPrint( LPVOID lpVoid )
{
    CDDRWindow * pWnd = ( CDDRWindow * ) lpVoid;
    while( TRUE )
    {
        EnterCriticalSection( &( pWnd->m_crtical ));
        if( pWnd->m_bIsRuning )
        {
            while( ! ( pWnd->m_prtLst.IsEmpty()))
            {
                HDC hDC = GetPrinterDC();   // Get Printer DC
                if( hDC != NULL )
                {
                    DOCINFO di;
                    InitDocinfo( & di, _T("Palette Doc"));
                    StartDoc( hDC, &di );
                    StartPage( hDC );
                    pWnd->m_prtLst.GetHead()->Print( hDC ); // Print First in List

                    EndPage( hDC );
                    EndDoc( hDC );

                    DeleteDC( hDC );
                }
                pWnd->m_prtLst.RemoveHead();
            }
        }
        else
        {
            LeaveCriticalSection( &( pWnd->m_crtical ));
            return 0;
        }
        LeaveCriticalSection( &( pWnd->m_crtical ));
        Sleep( 100 );
    }
    return 0;
}

 
CMovingPane::Print( HDC hdc )
{
    HDC hdcSurface;
    
    int pwidth = GetDeviceCaps( hdc, HORZRES );
    int pheight = GetDeviceCaps( hdc, VERTRES );
    int width = pwidth;
    int height = pheight;

    if( width >= 600 )
        width -= 400;
    if( height >= 600 )
        height -= 400;

    float blS = ( float ) (( float ) m_Surface.GetWidth() / ( float ) m_Surface.GetHeight());

    int cx, cy;

    cx = width;
    cy = ( int ) (( float ) width / blS );

    if( cy >= height )
    {
        cy = height;
        cx = ( int ) ( height * blS );
    }

    int x = (( pwidth - cx ) / 2 );
    int y = (( pheight -  cy ) / 2 );

    if( m_Surface.GetDirectSurface()->GetDC( & hdcSurface ) == DD_OK )
    {
        StretchBlt( hdc, x, y, cx, cy, hdcSurface, 0, 0, m_Surface.GetWidth(), m_Surface.GetHeight(), SRCCOPY );
        m_Surface.GetDirectSurface()->ReleaseDC( hdcSurface );
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

示申○言舌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值