打印预览与用虚拟打印机打印出来的不一样
在写的是打印的功能,目前的状态就是能够打印我想要的图像,但是打印预览显示的画面很小。网上找资料写的是打印预览传递的dc是打印机的,而我在视图内操作的图像显示到打印机需要进行逻辑转换。但是我用虚拟打印机打印的图像没有问题又是怎么回事?按理说打印预览和打印不是应该一样的画面吗?还有一点就是我执行过一次打印之后再点打印预览就能显示正常一点但还是偏小
想要打印的图像:

操作的视图是带缩放功能的:

视图放大两倍后的图像:

即将执行打印(因为打印初始化代码里我设置了只打印一张)

虚拟打印机打印出来的tif效果:

没执行打印前打印预览的效果:

执行过打印之后的打印预览效果:
上代码(主要是打印设置的部分,onpreparedc里面的注释部分是我用的另一种方法,用了之后打印预览能够正常显示,但是视图缩放失效并且出现图形错位的问题,而且打印出来的图像相当于我视图放大两倍后的画面,只能打印左上角的一部分):
// CSciplotView 打印
BOOL CGDIModeView::OnPreparePrinting(CPrintInfo* pInfo)
{
CZoomView::SetZoomScale(100);
CPrintDialog m_PrintDlg(FALSE);
HDC m_hDC;
m_hDC=m_PrintDlg.CreatePrinterDC();
LPDEVMODE lpDevMode;
PRINTDLG pd=pInfo->m_pPD->m_pd;
if(AfxGetApp()->GetPrinterDeviceDefaults(&pd))
{
lpDevMode=(LPDEVMODE)GlobalLock(pd.hDevMode);
if(lpDevMode)
{
lpDevMode->dmPaperSize=DMPAPER_A4;
lpDevMode->dmOrientation=DMORIENT_LANDSCAPE;//横向打印
/* lpDevMode->dmPaperWidth =1900;
lpDevMode->dmPaperLength =700; */
}
GlobalUnlock(pd.hDevMode);
}
// 默认准备
pInfo->SetMaxPage(1);
pInfo->m_nNumPreviewPages=1;
return DoPreparePrinting(pInfo);
}
void CGDIModeView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(m_totalLog);
//pDC->SetWindowExt(m_totalDev);
CPoint pOrg;
pDC->SetViewportExt(m_totalDev);
pOrg = -GetDeviceScrollPosition();
if(m_bCenter)
{
CRect rect;
GetClientRect(&rect);
if(m_totalDev.cx < rect.Width())
pOrg.x = (rect.Width() - m_totalDev.cx) / 2;
if(m_totalDev.cy < rect.Height())
pOrg.y = (rect.Height() - m_totalDev.cy) / 2;
}
pDC->SetViewportOrg(pOrg);
CScrollView::OnPrepareDC(pDC, pInfo);
//CView::OnPrepareDC(pDC,pInfo);
//pDC->SetMapMode(MM_ANISOTROPIC);
//CSize size(800,600);
//pDC->SetWindowExt(size)
//int x=pDC->GetDeviceCaps(LOGPIXELSX);