打印尺寸问题

dahuatttt 2010-03-26 01:09:26
写个打印程序,用来打一张自制表格,比例都设定好了,打印也没问题。最近碰巧设置了下打印纸张大小,从A4变B4或者B5,结果表格打到纸上,大小全变了!
原先用的是 dc.SetMapMode(MM_ISOTROPIC);
换成下面这个也还是会变
dc.SetMapMode(MM_LOMETRIC);

怎样才能实现像素到尺寸的固定比例。
着急中,谢谢。
...全文
106 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
副组长 2010-03-28
  • 打赏
  • 举报
回复
这个需要自己算,根据打印机设置,应用打印机的CPrintDC获取打印机水平和垂直输出的点数,设置字体的磅数,再看水平能打印多少个字,垂直有多少行。和在显示器上调整输出时一样。也可以自己按比例算,挺费事的。
大狗狗 2010-03-28
  • 打赏
  • 举报
回复
这方面没有比《windows程序设计》里讲的更清楚的了
dahuatttt 2010-03-28
  • 打赏
  • 举报
回复
那就是说,SetMapMode不能用于固定打印比例了?
笨笨仔 2010-03-28
  • 打赏
  • 举报
回复
打印机使用的是设备坐标,而程序使用的是逻辑坐标,因此需要在打印前进行转换。以下是设备坐标的比例参数,打印时可根据需要进行变换。

int ww=pPDC->GetDeviceCaps(HORZRES); // 返回宽度(像素)
int hh=pPDC->GetDeviceCaps(VERTRES); // 返回高度(像素)

// 计算每毫米像素
LPDEVMODE pDevMode;
pDevMode=(LPDEVMODE)GlobalLock(pInfo->m_pPD->m_pd.hDevMode); // 锁定公共变量
GlobalUnlock(pInfo->m_pPD->m_pd.hDevMode); // 解锁公共变量
int wm=pDevMode->dmPaperLength; // 长度0.1mm数
int hm=pDevMode->dmPaperWidth; // 宽度0.1mm数
int pq=pDevMode->dmPrintQuality; // 打印分辨率(像素/英寸)

int dw=10*pq/254; // 打印分辨率(像素/毫米)
副组长 2010-03-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dahuatttt 的回复:]
那就是说,SetMapMode不能用于固定打印比例了?
[/Quote]
想不用设计就有固定比例?这个真没有。 :)
dahuatttt 2010-03-27
  • 打赏
  • 举报
回复
to xuddk727:
全程textout。
和硬件型号有关?程序中指定了尺寸比不行吗?
许文君 2010-03-27
  • 打赏
  • 举报
回复
另外硬件型号??
许文君 2010-03-27
  • 打赏
  • 举报
回复
你是怎么输出的呢
dahuatttt 2010-03-27
  • 打赏
  • 举报
回复
顶!!!!!!!!!!!!!!!!
dahuatttt 2010-03-26
  • 打赏
  • 举报
回复
这么快又见底了!顶上来!
dahuatttt 2010-03-26
  • 打赏
  • 举报
回复
顶!!!!!!!!!!!

16,473

社区成员

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

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

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