我现在要打印图形可视部分的打印,应该怎么做啊?
图形是在0.1mm模式下绘制的,在OnPrint()函数中把映射模式改为MM_TWIPS,
如果我没有添加什么代码的话,程序就是出图形最做上角的那部分,但是我只要打印可以看见的那部分,我用InvalidateRect()函数,可是没有什么变化?这个到底应该怎么弄呢?

解决方案 »

  1.   

    我觉得最好打印和绘图的绘图模式一致,并且都不是MM_TEXT,这样的话就用不着坐标转换了,否则的话,你可以记下可视部分的打印区域,打印时使用CDC::SelectClipRgn设置打印区域,基本就是这样子吧
      

  2.   

    楼主说的映射模式就没有MM_TEXT,我回头也去试试。
      

  3.   

    bluebohe(薄荷)
    我在Onprint函数中是这样写的,可是他依然是那样的结果,还是只能打印最左上角,!
    void CTideView::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
    {
    pDC->SetMapMode(MM_TWIPS);
    int x, y;
    CRect rect;
    GetClientRect(&rect);
    x = GetScrollPos(SB_HORZ);
    y = GetScrollPos(SB_VERT);
    CRect rect1(x, y, x + rect.right, y + rect.bottom); 
    // pDC->DPtoLP(&rect1);
    CRgn rgn;
    rgn.CreateRectRgn(rect1.left, rect1.top, rect1.right, rect1.bottom);
    pDC->SelectClipRgn(&rgn);
    // InvalidateRgn(&rgn); CScrollView::OnPrint(pDC, pInfo);
    }
      

  4.   

    代码有问题,一时还不知道如何修改,你把你OnDraw中的代码再给我看看
      

  5.   

    我再OnDraw()里面没有什么代码,只有一个函数
    pDoc->Draw(&pDC, 0 ,0 m_bColor);
    这个函数就是绘制图形的时候用的,绘制图形我用的是类模板!
    多谢!bluebohe(薄荷)
      

  6.   

    也很难发现问题,把出问题的程序(要能运行)发给我我看看[email protected]
    我在用你的onprint完后似乎没发现问题
      

  7.   

    用pDC->SetMapMode(MM_LOMETRIC );
    这个就是0.1mm的模式。只是y轴是小于等于0的
      

  8.   

    finalwish(gogo) 
    这个我知道,可是怎么解决呢?
    我重载Onprint()函数得时候,它可以打印出左上角得图形啊
      

  9.   

    关于打印图形我也不怎么熟悉。不过
    www.vckbase.com上有打印的例子你看看有没有类似的代码,你参考参考
      

  10.   

    pDC->SetMapMode(MM_TWIPS);这个转换没有必要。