如题

解决方案 »

  1.   

    使用GDI打印,必须设置打印的模式,要在各种打印机上打印的位置和大小一样,将打印模式设置为逻辑长度单位。不能使用MM_TEXT影射模式。
      

  2.   

    To ACuke(黄瓜) :
    能不能解释一下打印倍数,如何设置打印倍数呀?
    谢谢!
      

  3.   

    打印时候用 SetMapMode(MM_LOMETRIC)
      

  4.   

    To sunrise(日出江花红胜火):
    若不使用MM_TEXT映射模式,用GDI打印设置为何种打印模式为宜呀?我是如此计算逻辑尺寸的:
    pInfo->m_rectDraw.SetRect(0, 0, pDC->GetDeviceCaps(HORZRES), pDC->GetDeviceCaps(VERTRES));
    //为打印区域计算逻辑尺寸。本例可以省略
    pDC->DPtoLP(&pInfo->m_rectDraw);
    应该说我在往打印设备上输出时用的是逻辑坐标。却打印效果不一样,好郁闷呀。
      

  5.   

    SetMapMode(MM_LOMETRIC) //设置的每一个长度单位为0.1毫米
    SetMapMode(MM_LOENGLISH) //设置的每一个单位长度为0.01英寸。
    SetMapMode(MM_HIENGLISH) //设置的每一个单位长度为0.001英寸。
    SerMapMode(MM_HIMETRIC)  //设置的每一个单位长度为0.001毫米。
    这些设置都是逻辑单位长度,和打印机的物理的分辨率没有关系。
    你对打印机设置好了上面的逻辑单位以后,在打印的时候,就可以直接使用逻辑单位作为坐标了。譬如要打印一个100毫米边长的正方形,如下:
    pDC->SetMapmode(MM_LOMETRIC);//设置0.1毫米作为逻辑长度单位,y轴的方向是向上的
    pDC->SetWindowOrg(0,1500);//设置窗口原点
    pDC->Rectangle(0,0,1000,1000);//用当前的画笔绘制一个边长为100毫米的正方形上面的方法,绘制一个边长为100毫米的正方形。可以不管屏幕的分辨率可以使用 GetDeviceCaps(HORZSIZE) 获取打印纸的宽度(毫米单位)
    使用 GetDeviceCaps(VERTSIZE) 获取打印纸的高度(毫米单位)