mfc打印和打印预览

lovedogi 2012-11-19 08:11:16
我在做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));
}

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

请问怎么将打印和预览效果弄一致?
...全文
273 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
如果如是 2014-08-09
  • 打赏
  • 举报
回复
最后怎么解决的啊?
catlwwy 2012-11-23
  • 打赏
  • 举报
回复
是GDI+的问题,你用GDI来显示试试看
傻X 2012-11-20
  • 打赏
  • 举报
回复
cx, cy的问题是一方面吧。 Graphics graphics(pDC->GetSafeHdc());有CreatePrinterDC()的吧 尝试下吧
hdg3707 2012-11-20
  • 打赏
  • 举报
回复
打印一般用MM_TWIST这个模式方便方便,你试试这个模式,查一下这个模式对应的尺寸关系,我忘了
leftbackfielder 2012-11-20
  • 打赏
  • 举报
回复
跟一下程序,是不是坐标搞错了?
lovedogi 2012-11-20
  • 打赏
  • 举报
回复
引用 1 楼 hdg3707 的回复:
改变映射模式,好象是在OnPreparePrint函数里设置,如果改变映射模式不行,就让打印和打印预览是两个代码,在打印时调用打印代码,预览时调用你原来的代码.不过只要取得了打印纸张大小和设置好映射模式就可以了
具体怎么改映射模式的,我MM_TEXT和MM_LOMETRIC都试过,一样的
hdg3707 2012-11-19
  • 打赏
  • 举报
回复
改变映射模式,好象是在OnPreparePrint函数里设置,如果改变映射模式不行,就让打印和打印预览是两个代码,在打印时调用打印代码,预览时调用你原来的代码.不过只要取得了打印纸张大小和设置好映射模式就可以了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧