采用CPrintDialog类实现打印    CPrintDialog printDlg (FALSE);
    CDC dc;
    dc.Attach (printDlg.GetPrinterDC ());
目前可以打出dc上的东西因为dc上的图很小,为了节约纸张,要一次在纸上同时横向打印出三个相同的dc图,这个要怎么实现?思路如何?

解决方案 »

  1.   

    把三个相同的dc图合在一个dc上?!!
      

  2.   

    多次调用dc.BitBlt,调节第一个与第二个参数试试,呵呵 
      

  3.   

    int CBarcodeDlg::print(LPSTR text,CDC* pDC)
    {
    CPen pen,*pOldPen;
    int High,i;
    LPSTR str=text;
    //设定条码左上脚初始点
    CPoint point(50,50); //画笔为黑色
    pen.CreatePen (PS_SOLID,int(m_CodeWidth*rato),RGB(0,0,0));
    //将画笔选入打印设备环境
    pOldPen=pDC->SelectObject (&pen);
    High=int(m_CodeHigh*rato); while(*str)
    {
    for(i=0;i<(*str-'0');i++)
    {
    pDC->MoveTo (point);
    pDC->LineTo (point.x,point.y+High);
    point.x+=int(m_CodeWidth*rato);
    }
    str++;
    point.x+=int(m_CodeWidth*rato)*(*str-'0');
    str++;
    }
        pDC->TextOut(point.x+10,point.y+10,"13959113180");
    //上面是个条形码的dc,现在我就是想把上面这个图形横向一次打印出3个来
    pDC->SelectObject (pOldPen);
    pen.DeleteObject ();
    return 0;
    }
      

  4.   

    怎么改啊?
    while(*str) 

    for(i=0;i <(*str-'0');i++) 

    pDC->MoveTo (point); 
    pDC->LineTo (point.x,point.y+High); 
    point.x+=int(m_CodeWidth*rato); 

    str++; 
    point.x+=int(m_CodeWidth*rato)*(*str-'0'); 
    str++; 

    上面这个循环是单个条码图形,如果贴三次相同代码,后面两次改一下point,那么很多值在第一次已经被改变了
      

  5.   

    也可以这么说吧。在你的打印函数里面肯定有绘制第一个图的。定义一个CRect rect;用来记录你的坐标位置,把你第一个图的左上左下右上右下存到rect中。然后就以第一个图的左下右下作为第二个图的开始。大概就这样吧。这里可以一个for循环就可以搞定了。