我自己用VC做了一个图表,可是用OnDraw()函数实现打印时,图像总是在纸的左上角,并且很小,我用StretchBlt(),可是激光打印机不支持这个函数,每次一用这个函数打印时,就什么也打不出来,求助!如何实现打印呀?我翻了几本学习VC的书,上面介绍的打印功能十分的简单,没有找到答案,请高手们指点指点呀!谢谢了!

解决方案 »

  1.   

    恐怕不是不支持,而是你没设置映射模式吧.
    默认方式的MM_TEXT的单位是像素,100像素的东西在屏幕上大得很,到打印机上就只有针尖大一块了.
    用MM_LOENGLISH  等就好得多.
    SetMapMode()
      

  2.   

    我用过了MM_LOENGLISH,可还是什么也打不出来呀?
      

  3.   

    打印代码贴来看看
    [email protected]
      

  4.   

    加上这个
    void CEmisDrawView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
    {
    pDC->SetMapMode(MM_ANISOTROPIC);
    CView::OnPrepareDC(pDC, pInfo);
    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 ;
    long yExt = (long)size.cy * yLogPixPerInch/96 ;
    pDC->SetViewportExt((int)xExt, (int)yExt);
    CScrollView::OnPrepareDC(pDC, pInfo);
    }
      

  5.   

    支持也没什么用处,因为一般的位图是显示设备相关的DDB位图,不能被选择进入到打印设备dc中去,所以要使用StretchDIBits,我这里篇文章介绍如何使用
    http://www.csdn.net/Develop/read_article.asp?id=23388
    http://www.csdn.net/Develop/read_article.asp?id=23389
      

  6.   

    我的情况和楼主的一样,bluebohe(薄荷) (MVP) 的贴子不能解决问题
      

  7.   

    在OnPrint里写、打印函数~!!!
      

  8.   

    把数据输出或要打印的绘图程序放在OnDraw() 或  OnPaint()里看看。
    再要注意映射模式的问题。