我太笨了,没搞懂映射模式,特请教!

杨哥儿 2011-08-07 10:07:08
有图形rect(0,0,1008,1426*n),n为正整数;[1008-210*4.8,1426=297*4.8]
我可以用正常模式显示在SCrollView中,但无法显示有打印预览中(A4纸张)。
不知道如何处理.?
SetWindowOrg,SetWindowExt,SetViewportOrg,SetViewportExt,这四个函数不知道怎么用。
特请高手帮写几行代码,让我真正明白映射模式。
不恩不言谢!
...全文
242 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
杨哥儿 2011-08-15
  • 打赏
  • 举报
回复
我的帖子有60%以上没有找到答案。不知道为什么???
杨哥儿 2011-08-12
  • 打赏
  • 举报
回复
谢谢wqhua!
我原来也是这样写,但打印预览的时候部是不能正常充满页面!
wqhua 2011-08-11
  • 打赏
  • 举报
回复
上面是以前写的一个打印的。直接贴出来了,你看看
wqhua 2011-08-11
  • 打赏
  • 举报
回复

void CPrintView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class

if(pDC->IsPrinting())
{
// AfxMessageBox("IN3");
pDC->SetMapMode(MM_ANISOTROPIC);//转换坐标映射方式
CSize size =CSize(1280, 800);
pDC->SetWindowExt(size);//确定窗口大小
// 每英寸多少个像素
int xLogPixPerInch=pDC->GetDeviceCaps(LOGPIXELSX);
int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX);
// 得到设备坐标和逻辑坐标的比例
long xExt =(long)size.cx * xLogPixPerInch / 124;
long yExt =(long)size.cx * yLogPixPerInch / 160;

int originY = yExt * (pInfo->m_nCurPage - 1);
pDC->SetViewportOrg(0, originY);
pDC->SetViewportExt((int)xExt, (int)yExt);

}

CView::OnPrepareDC(pDC, pInfo);
}
lazy_2010 2011-08-10
  • 打赏
  • 举报
回复
系统屏幕是小字号的时候,相当于 96 dpi 的一个打印机(大字号的时候,是 120 dpi 的打印机)

现在的问题是,你得支持各种打印设备
杨哥儿 2011-08-09
  • 打赏
  • 举报
回复
那我在ondraw中是不是需要写两种代码(一个针对显示器,一个是打印机?)
我不想这样做!
xiaojunjun1202 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lazy_2010 的回复:]
把你的 onDraw, onPreparePrinting , onBeginPriting, onEndPrinting 代码发上来看看吧
[/Quote]

+1
lazy_2010 2011-08-08
  • 打赏
  • 举报
回复
一般,我在 OnBeginPrinting 中指定打印的页码数量;

根据我的理解,A4 的纸张,dpi 的数值通常都远远大于屏幕的 dpi,(dpi = dot per inch),印象中最常见的屏幕的 dpi 是 96 或者 120,而打印机是 600/1200/... dpi 的;

你可以通过 pDC->GetDeviceCaps(LOGPIXELSX)和 pDC->GetDeviceCaps(LOGPIXELSY) 获取一下数据,在打印的时候,pDC->IsPrinting() 返回的是非 0;

换句话说,就算通常输出一个字符,在打印的时候为了能够显示得比较大,需要使用很大的字号;显示图形也是同样的道理;

希望对你有帮助
jacky_qiu 2011-08-08
  • 打赏
  • 举报
回复
这个给你参考一下,希望有用
http://hi.baidu.com/qiujiejia/blog/item/61497ceeca3daa3b2df53437.html
杨哥儿 2011-08-08
  • 打赏
  • 举报
回复
onPreparePrinting , onBeginPriting, onEndPrinting 不知道写什么代码。

void CcpfxsView::OnDraw(CDC* pDC)
{
SetScrollSizes(MM_TEXT,CSize(1008,1426));
pDC->Rectangle(1,1,1007,1425);
}

打印出来的图形只有A4纸张的1/6!
杨哥儿 2011-08-07
  • 打赏
  • 举报
回复
MM_ANISOTROPIC,MM_LOENGLISH,MM_TEXT应该用哪个?
杨哥儿 2011-08-07
  • 打赏
  • 举报
回复
就是比例不知道怎么设定。请指教!
wqhua 2011-08-07
  • 打赏
  • 举报
回复
打印与显示在屏幕上是一样的啊。
楼主是没有设置好打印时的比例关系吧。
杨哥儿 2011-08-07
  • 打赏
  • 举报
回复
主要是打印预览不正确!我要的是打印功能!
ryfdizuo 2011-08-07
  • 打赏
  • 举报
回复
窗口 客户区的坐标系映射:
坐标系:原点左上角,X向右,Y向下。
窗口和客户区主要是原点位置不同。
lazy_2010 2011-08-07
  • 打赏
  • 举报
回复
把你的 onDraw, onPreparePrinting , onBeginPriting, onEndPrinting 代码发上来看看吧
杨哥儿 2011-08-07
  • 打赏
  • 举报
回复
我的图形是1008X1426像素,要打印在210X297mm的纸上,应该怎样写代码?
求救。。。
lazy_2010 2011-08-07
  • 打赏
  • 举报
回复
怀疑不是映射模式的问题,而是需要知道在打印的时候,打印机的 dpi 与屏幕的 dpi 不一样
Eleven 2011-08-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 uself 的回复:]

MM_ANISOTROPIC,MM_LOENGLISH,MM_TEXT应该用哪个?
[/Quote]
参考MSDN上的各个参数的说明啊
杨哥儿 2011-08-07
  • 打赏
  • 举报
回复
求人理我一下!帮了顶下也行!

16,548

社区成员

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

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

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