void CForm1::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) 
{
if (m_pMemdc0->GetSafeHdc())
m_pMemdc0->DeleteDC();
m_pMemdc0->CreateCompatibleDC(pDC);
CClientDC dc(this);
CRect rect;
GetClientRect(rect);
m_pMemdc0->SetMapMode(MM_ANISOTROPIC   );
m_pMemdc0->SetWindowExt(dc.GetDeviceCaps(LOGPIXELSX),dc.GetDeviceCaps(LOGPIXELSY));
m_pMemdc0->SetViewportExt(m_pMemdc0->GetDeviceCaps(LOGPIXELSX),m_pMemdc0->GetDeviceCaps(LOGPIXELSY)); if (m_pMembmp0->GetSafeHandle())
m_pMembmp0->DeleteObject();
m_pMembmp0->CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
m_pMemdc0->SelectObject(m_pMembmp0);
dc.DPtoLP(rect); //Convert to Logical Coordinates
m_rect = rect; //Save Logical Coordinates
m_pMemdc0->BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);
}
void CForm1::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
{
// TODO: Add your specialized code here and/or call the base class
CRect r;
GetClientRect(&r); pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(m_pMemdc0->GetDeviceCaps(LOGPIXELSX),m_pMemdc0->GetDeviceCaps(LOGPIXELSY));
pDC->SetViewportExt(pDC->GetDeviceCaps(LOGPIXELSX),pDC->GetDeviceCaps(LOGPIXELSY));
}
问什么视图的图形打印不出来?如果需要将图形旋转90度在打印应该如何处理?

解决方案 »

  1.   

    if (m_pMemdc0->GetSafeHdc())
    m_pMemdc0->DeleteDC();
    m_pMemdc0->CreateCompatibleDC(pDC);
    CClientDC dc(this);
    CRect rect;
    GetClientRect(rect);
    m_pMemdc0->SetMapMode(MM_ANISOTROPIC   );
    m_pMemdc0->SetWindowExt(dc.GetDeviceCaps(LOGPIXELSX),dc.GetDeviceCaps(LOGPIXELSY));
    m_pMemdc0->SetViewportExt(m_pMemdc0->GetDeviceCaps(LOGPIXELSX),m_pMemdc0->GetDeviceCaps(LOGPIXELSY)); if (m_pMembmp0->GetSafeHandle())
    m_pMembmp0->DeleteObject();dc.DPtoLP(rect); //Convert to Logical Coordinates
    m_rect = rect; //Save Logical Coordinates m_pMembmp0->CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
    m_pMemdc0->SelectObject(m_pMembmp0);
    //dc.DPtoLP(rect); //Convert to Logical Coordinates
    //m_rect = rect; //Save Logical Coordinates
    m_pMemdc0->BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);
      

  2.   

    你在打印时,使用打印的矩形框?
    void CForm1::OnPrint(CDC* pDC, CPrintInfo* pInfo)
    {
       if(pInfo)
    {
        m_rcPrintRect = pInfo->m_rectDraw;
    }
    CForm1::OnPrint(pDC, pInfo);
    }void CForm1::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
    {
    // TODO: Add your specialized code here and/or call the base class
    CRect r;
    //GetClientRect(&r);
             r = pInfo->m_rectDraw; pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetWindowExt(m_pMemdc0->GetDeviceCaps(LOGPIXELSX),m_pMemdc0->GetDeviceCaps(LOGPIXELSY));
    pDC->SetViewportExt(pDC->GetDeviceCaps(LOGPIXELSX),pDC->GetDeviceCaps(LOGPIXELSY));
    }
      

  3.   

    void CForm1::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
    {
    r = pInfo->m_rectDraw;
    CRect rect1,rect2,rect3,rect4,rect5,rect6,rect7,rect8;
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetWindowExt(m_pMemdc0->GetDeviceCaps(LOGPIXELSX),m_pMemdc0->GetDeviceCaps(LOGPIXELSY));
    pDC->SetViewportExt(pDC->GetDeviceCaps(LOGPIXELSX),pDC->GetDeviceCaps(LOGPIXELSY));
    pDC->StretchBlt(0,0,r.Width(),r.Height(),m_pMemdc0,0,0,r.Width(),r.Height(),SRCCOPY);
    }
    这个还是不行?是那里设置不行?
      

  4.   

    ON_COMMAND(ID_FILE_PRINT,CFormView::OnFilePrint)