VC 打印测井曲线 按照1:200的比例,但是打印出来的经过实际的测量,但是总是差一点点,感觉是绘制的时候,直接的moveto,lineto,中,直接就int类型的了,这个问题怎么解决的,怎么才能弄出,1:200的打印比例的标尺以及网格道啊,大神么,谁遇到过啊!!!
打印代码如下:
CPrintDialog d1(FALSE,PD_ALLPAGES|PD_ALLPAGES|PD_NOPAGENUMS,NULL); // 建立打印对话框对象
if(d1.DoModal()==IDOK)
{
memDC.Attach(d1.GetPrinterDC());
int xP = GetDeviceCaps(memDC.m_hDC, LOGPIXELSX); //x方向每英寸像素点数
int yP = GetDeviceCaps(memDC.m_hDC, LOGPIXELSY); //y方向每英寸像素点数
DOUBLE xPix = (DOUBLE)xP*10/254; //每 mm 宽度的像素
DOUBLE yPix = (DOUBLE)yP*10/254; //每 mm 高度的像素
DOUBLE fAdd = 5*yPix; //每格纵向递增量 5mm每个
DOUBLE nTop = 40*yPix; //第一页最上线
DOUBLE nxAdd = 5*xPix; //每格横向地增量 5mm每个
DOUBLE nLeft = 5*xPix; //最左线
DOUBLE nRight = (A4_W-20)*xPix; //最右线
//粗笔
cPen.CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
TCHAR szTitle[] = TEXT(“曲线");
static DOCINFO di = {sizeof (DOCINFO), szTitle} ;
if(memDC.StartDoc(&di)<0)
{
AfxMessageBox( "连接到打印机失败!", MB_ICONSTOP);
}
else
{
if(memDC.StartPage() < 0)
{
AfxMessageBox(_T("打印失败!"), MB_ICONSTOP);
memDC.AbortDoc();
return;
}
else
{
int gridSize=2;
//网格绘制
UINT gridNum = ((m_Bottomcurve-m_topcurve)/2)+10; //网格数 :(底深-顶深)/2+5
//绘制空道,
CRect rc;
//绘制网格粗实线
CPen penRect;
penRect.CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
CPen * pOldPen = memDC.SelectObject(&penRect);
memDC.Rectangle(nLeft+20*nxAdd*gs,nTop,nLeft+20*nxAdd*(gs+1),nTop+(gridNum)*fAdd);
rc.SetRect(nLeft+20*nxAdd*gs,nTop,nLeft+20*nxAdd*(gs+1),nTop+(gridNum)*fAdd);
memDC.SelectObject(pOldPen);
CPen penBlack;
penBlack.CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
pOldPen = memDC.SelectObject(&penBlack);
for (int i=gridSize; i<gridNum*gridSize; i+=gridSize)
{
if (i%(5) == 0)
{
memDC.MoveTo(rc.left,rc.top+i*fAdd);
memDC.LineTo(rc.right,rc.top+i*fAdd);
}
}
memDC.SelectObject(pOldPen);
//绘制网格细实线
CPen thinBlack;
thinBlack.CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
pOldPen = memDC.SelectObject(&thinBlack);
for (i=gridSize; i<gridNum*gridSize; i+=gridSize)
{
if (i%(5) != 0)
{
memDC.MoveTo(rc.left,rc.top+i*fAdd);
memDC.LineTo(rc.right,rc.top+i*fAdd);
}
}
memDC.SelectObject(pOldPen);
//绘制内部虚线
CPen dashed;
dashed.CreatePen(PS_DOT, 1, RGB(140, 140, 140));
pOldPen = memDC.SelectObject(&dashed);
for ( i=1; i<gridNum*gridSize; i+=gridSize )
{
memDC.MoveTo(rc.left,rc.top+i*fAdd);
memDC.LineTo(rc.right,rc.top+i*fAdd);
}
memDC.SelectObject(pOldPen);
penBlack.DeleteObject();//by mn
thinBlack.DeleteObject();//by mn
dashed.DeleteObject();//by mn
penRect.DeleteObject();
}
绘制出来的图,是这样的,但是打印出来的话,一厘米就是差那么一点点,而且随着深度的增加,这个误差就会显现的更加明显一些!!!

怎么才能做到准确呢,亲们!!!