就是一个jpg图片文件,要打印,其他类型也行

解决方案 »

  1.   

    如果图片显示在屏幕上的话 ,可以使用以下的代码:
    void CPrintDlg::OnPrint()
    {
     CDC* pDC=m_image.GetDC() ;
    CRect  rect ;
    m_image.GetClientRect(m_rect) ;int  formx,formy ;
    formx=pDC->GetDevieceCaps(LOGPIXELSX);
    formy=pDC->GetDeveiceCaps(LPGPIXELSY) ;
    CPrintDialog  dialog(FALSE) ;
    if(dialog.DoModal()==IDOK)
    {
      CDC  dc;
      dc.Attach(dialog.GetPrintDC()) ;
       
        //获取打印机与屏幕的分辨率比率
        int  printerx=dc.GetDeviceCaps(LOGPIXELSX) ;
        int  printery=dc.GetDevieceCaps(LOGPIXLSY) ;   double  ratex,ratey ;
       ratex=(double)printerx/formx ;
       ratey=(double)printery/formy ;
        //打印图象   dc.StartDoc("print") ;
       dc.StetchBlt(0,0,(int)(m_rect.Width()*ratex),(int)(m_rect.Height()*ratey,pDC,
      0,0,m_rect.Width(),m_rect.Height(),SRCCOPY) ;
       dc.EndDoc() ;
    }
    return
    }
      

  2.   

    一楼大哥,m_image是什么?我不会vc,公司要我弄这个,帮帮忙吧
      

  3.   

    为什么这样只是打开这个图片而不打印呢?
    ShellExecute(this->m_hWnd,"print","c:\\barcode128.jpg",NULL,NULL,SW_HIDE);   
    或者
    ShellExecute(NULL,"print","c:\\barcode128.jpg",NULL,NULL,SW_HIDE);   
      

  4.   

    文本文件是可以打印的
    ShellExecute(this->m_hWnd,"print","c:\\abc.txt","","", SW_HIDE);
      

  5.   

    void CRoyView::OnDraw(CDC* pDC)
    {
    CRoyDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    // 显示等待光标
    BeginWaitCursor();

    // 获取DIB
    HDIB hDIB = pDoc->GetHDIB();

    // 判断DIB是否为空
    if (hDIB != NULL)
    {
    LPBYTE lpDIB = (LPBYTE) ::GlobalLock((HGLOBAL) hDIB);

    // 获取DIB宽度
    int cxDIB = (int) pDoc->m_clsDIB.DIBWidth(lpDIB);

    // 获取DIB高度
    int cyDIB = (int) pDoc->m_clsDIB.DIBHeight(lpDIB); ::GlobalUnlock((HGLOBAL) hDIB);

    CRect rcDIB;
    rcDIB.top = rcDIB.left = 0;
    rcDIB.right = cxDIB;
    rcDIB.bottom = cyDIB;

    CRect rcDest;

    // 判断是否是打印
    if (pDC->IsPrinting())
    {
    // 是打印,计算输出图像的位置和大小,以便符合页面

    // 获取打印页面的水平宽度(象素)
    int cxPage = pDC->GetDeviceCaps(HORZRES);

    // 获取打印页面的垂直高度(象素)
    int cyPage = pDC->GetDeviceCaps(VERTRES);

    // 获取打印机每英寸象素数
    int cxInch = pDC->GetDeviceCaps(LOGPIXELSX);
    int cyInch = pDC->GetDeviceCaps(LOGPIXELSY);

    // 计算打印图像大小(缩放,根据页面宽度调整图像大小)
    rcDest.top = rcDest.left = 0;
    rcDest.bottom = (int)(((double)cyDIB * cxPage * cyInch) / ((double)cxDIB * cxInch));
    rcDest.right = cxPage;

    // 计算打印图像位置(垂直居中)
    int temp = cyPage - (rcDest.bottom - rcDest.top);
    rcDest.bottom += temp/2;
    rcDest.top += temp/2;
    }
    else // 非打印
    {
    // 不必缩放图像
    rcDest = rcDIB;
    }
    // 输出DIB
    pDoc->m_clsDIB.PaintDIB(pDC->m_hDC, &rcDest, pDoc->GetHDIB(),
    &rcDIB, pDoc->GetDocPalette());
    }
    // 恢复正常光标
    EndWaitCursor();
    }void CRoyView::OnInitialUpdate()
    {
    CScrollView::OnInitialUpdate(); //CSize sizeTotal;
    // TODO: calculate the total size of this view
    //sizeTotal.cx = sizeTotal.cy = 100;
    //SetScrollSizes(MM_TEXT, sizeTotal);
    }/////////////////////////////////////////////////////////////////////////////
    // CRoyView printingBOOL CRoyView::OnPreparePrinting(CPrintInfo* pInfo)
    {
    // default preparation // 设置总页数为一。
    pInfo->SetMaxPage(1);

    return DoPreparePrinting(pInfo);
    }void CRoyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
    // TODO: add extra initialization before printing
    }void CRoyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
    // TODO: add cleanup after printing
    }