为什么我打印出来的图片超级小?网上看了很多资料,可是没用啊。求大神指导

解决方案 »

  1.   

    这是我以前做的一个打印程序
    // CdatabaseView 打印BOOL CdatabaseView::OnPreparePrinting(CPrintInfo* pInfo)
    {
        int count=datavec.size();
    int row=0;
    int page=count/20+1;
    pInfo->SetMaxPage(page); CPrintDialog print(false);
    if(print.DoModal()==IDOK)
    {
    CDC printed;
    printed.Attach(print.GetPrinterDC());
    DOCINFO pdoc;
    pdoc.cbSize=sizeof(pdoc);
    //pdoc.lpszDocName=L"pdoc";
    pdoc.lpszDatatype=NULL;
    pdoc.fwType=NULL;
    pdoc.lpszOutput=NULL;
    //if(printed.StartDoc(&pdoc)>=0)
    //{
    LOGFONT logfont;
    memset(&logfont,0,sizeof(LOGFONT));
    logfont.lfHeight=75;
    CFont font;
    CFont *oldfont=NULL;
    if(font.CreateFontIndirect(&logfont))
    oldfont=(CFont*)printed.SelectObject(&font);
            int i,j;
    for(j=1;j<=page;j++)
        {
    //pInfo->m_nCurPage;
    printed.StartPage();
    int x=800,y=560;//A4纸,页面中的位置,横向为x轴,纵向是y轴,A4 maxX=4000 maxY=7000 建议按字符大小为75,每页安排40条纪录,初试纪录开始位置为x=500 y=200
    CString pageHead,pageBottom;
    //pageHead.Format(_T("日志信息纪录统计表"));
    //printed.TextOut(1500,100,pageHead); //打印页眉
    //CString title;//设置标题栏
    //title.Format(_T("序号                时间                      操作"));
    //printed.TextOut(500,200,title); //打印页眉
    //CString stt;
    //stt.Format(_T("______________________________________________________________________________________")); 
    //printed.TextOut(500,200+80,stt); //打印页眉
                for(i=0;(i<20)&&(row<count);i++)
    {
    CString record(_T(""));
    CString str="   ";
    long num=i+(j-1)*20;
    record+=datavec[num].school+str+datavec[num].dept+str+datavec[num].major+str+datavec[num].dormy+str
        +datavec[num].pay+str+datavec[num].name+str+datavec[num].sex+str+datavec[num].no+str
    +datavec[num].age+str+datavec[num].home; printed.TextOut(x,y,record);
    x+=80;
    //printed.TextOut(x,y,stt);
    y+=80;
    row++;
    }    
    pageBottom.Format(_T("共%d页   第%d页"),page,j);
    printed.TextOut(1500,y,pageBottom);
                printed.EndPage();//此页结束 
    }  
    font.DeleteObject();
    if(oldfont!=NULL) 
    printed.SelectObject(oldfont);
    //printed.EndDoc();
        printed.DeleteDC();
    }
    return DoPreparePrinting(pInfo);
    }
    void CdatabaseView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
    {
    // TODO: 在此添加专用代码和/或调用基类
    CScrollView::OnPrepareDC(pDC,pInfo);
    //pDC->SetMapMode(MM_ANISOTROPIC); //转换坐标映射方式
    //CSize size = CSize(800,560);
    //pDC->SetWindowExt(size);//确定窗口的大小
    ////得到实际设备每逻辑英寸的像素数量
    //int xLogPixelPerInch = pDC->GetDeviceCaps(LOGPIXELSX);
    //int yLogPixelPerInch = pDC->GetDeviceCaps(LOGPIXELSY); ////得到设备坐标和逻辑坐标的比例
    //long xExt = (long)size.cx * xLogPixelPerInch / 96;
    //long yExt = (long)size.cy * yLogPixelPerInch / 96;
    //pDC->SetViewportExt((int)xExt,(int)yExt); //设置视口大小
    //CView::OnPrepareDC(pDC, pInfo);
    /*CRect rect;
    pDC->SetMapMode(MM_LOMETRIC);
    GetClientRect(rect);
    pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);*/
    }
    void CdatabaseView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
    { pDC->SetMapMode(MM_ANISOTROPIC); //转换坐标映射方式
    CSize size = CSize(800,560);
    pDC->SetWindowExt(size);//确定窗口的大小
    //得到实际设备每逻辑英寸的像素数量
    int xLogPixelPerInch = pDC->GetDeviceCaps(LOGPIXELSX);
    int yLogPixelPerInch = pDC->GetDeviceCaps(LOGPIXELSY); //得到设备坐标和逻辑坐标的比例
    long xExt = (long)size.cx * xLogPixelPerInch / 96;
    long yExt = (long)size.cy * yLogPixelPerInch / 96;
    pDC->SetViewportExt((int)xExt,(int)yExt); //设置视口大小
    CScrollView::OnPrint(pDC, pInfo);
    }