mfc打印和打印预览

时间:2023-02-05 08:48:40
我在做mfc单文档的打印和打印预览。我再ondraw函数里写如下代码
if (pDoc->m_pImage)
{
int cxPage = pDC->GetDeviceCaps(HORZRES);
int cyPage = pDC->GetDeviceCaps(VERTRES);

int cxInch = pDC->GetDeviceCaps(LOGPIXELSX);
int cyInch = pDC->GetDeviceCaps(LOGPIXELSY);

int cx = cxPage-200;
int cy = (int)(((double)pDoc->m_pImage->GetHeight()*cyInch*cx)
/((double)pDoc->m_pImage->GetWidth()*cxInch));

Graphics graphics(pDC->GetSafeHdc());
graphics.SetInterpolationMode(InterpolationModeHighQualityBicubic);
graphics.DrawImage(pDoc->m_pImage, Rect(100, 100, cx, cy));
}

我再预览的时候没问题的,但是打印出来就有问题了。
预览图像: mfc打印和打印预览
打印图像: mfc打印和打印预览

请问怎么将打印和预览效果弄一致?

7 个解决方案

#1


改变映射模式,好象是在OnPreparePrint函数里设置,如果改变映射模式不行,就让打印和打印预览是两个代码,在打印时调用打印代码,预览时调用你原来的代码.不过只要取得了打印纸张大小和设置好映射模式就可以了

#2


引用 1 楼 hdg3707 的回复:
改变映射模式,好象是在OnPreparePrint函数里设置,如果改变映射模式不行,就让打印和打印预览是两个代码,在打印时调用打印代码,预览时调用你原来的代码.不过只要取得了打印纸张大小和设置好映射模式就可以了

具体怎么改映射模式的,我MM_TEXT和MM_LOMETRIC都试过,一样的

#3


跟一下程序,是不是坐标搞错了?

#4


打印一般用MM_TWIST这个模式方便方便,你试试这个模式,查一下这个模式对应的尺寸关系,我忘了

#5


cx, cy的问题是一方面吧。

Graphics graphics(pDC->GetSafeHdc());有CreatePrinterDC()的吧

尝试下吧

#6


是GDI+的问题,你用GDI来显示试试看

#7


最后怎么解决的啊?

#1


改变映射模式,好象是在OnPreparePrint函数里设置,如果改变映射模式不行,就让打印和打印预览是两个代码,在打印时调用打印代码,预览时调用你原来的代码.不过只要取得了打印纸张大小和设置好映射模式就可以了

#2


引用 1 楼 hdg3707 的回复:
改变映射模式,好象是在OnPreparePrint函数里设置,如果改变映射模式不行,就让打印和打印预览是两个代码,在打印时调用打印代码,预览时调用你原来的代码.不过只要取得了打印纸张大小和设置好映射模式就可以了

具体怎么改映射模式的,我MM_TEXT和MM_LOMETRIC都试过,一样的

#3


跟一下程序,是不是坐标搞错了?

#4


打印一般用MM_TWIST这个模式方便方便,你试试这个模式,查一下这个模式对应的尺寸关系,我忘了

#5


cx, cy的问题是一方面吧。

Graphics graphics(pDC->GetSafeHdc());有CreatePrinterDC()的吧

尝试下吧

#6


是GDI+的问题,你用GDI来显示试试看

#7


最后怎么解决的啊?