您好:
请看下面函数:
注意到kkk了吗?原来kkk=1,(视图上的图形坐标为最左上角)如果把kkk设置为1.1,或者其他,在A4纸打印预揽时,正常,如果换成B4 纸,则视图上的图形全都跑到中间去了。
void CPointtestView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
CView::OnPrepareDC(pDC, pInfo);
//pDC->SetMapMode(MM_TWIPS);
pDC->SetMapMode(MM_ANISOTROPIC);//转换坐标映射方式
CSize size = CSize(800, 560);
pDC->SetWindowExt(size);//确定窗口大小//得到实际设备每逻辑英寸的象素数量
int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX);
int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);//得到设备坐标和逻辑坐标的比例
long xExt = (long)size.cx * xLogPixPerInch/96*kkk;
long yExt = (long)size.cy * yLogPixPerInch/96*kkk;
pDC->SetViewportExt((int)xExt, (int)yExt);
}
请问是怎么回事?怎么解决?

解决方案 »

  1.   

    CSize size = CSize(800, 560);的错
    这个逻辑英寸的象素数应为通过现在的逻辑象素数*要显示的字符宽
      

  2.   

    theApp.SetPrinterMode(pDC);
    pInfo->SetMaxPage(1);
    InitFontSize(pDC);
    m_PaperSize = CSize(pDC->GetDeviceCaps(HORZRES), pDC->GetDeviceCaps(VERTRES));
        m_LogicalPageSize.cx = GetVirtualWidth() + MERGE*m_CharSize.cx * 2;
    // m_LogicalPageSize.cy = MulDiv(m_LogicalPageSize.cx, m_PaperSize.cy, m_PaperSize.cx);
    m_LogicalPageSize.cy = GetReaHeight() + MERGE*m_CharSize.cy;
    ///////////////////////
    void CPrintView::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
    {
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetWindowExt(m_LogicalPageSize);
    pDC->SetViewportExt(m_PaperSize);
        pDC->SetWindowOrg(0, 0);