奇怪,真是奇怪了,一个打印问题! 说来也奇怪了,用MFC类写了一个打印的功能.当时测试的时候使用的是虚拟打印机,打印出来的效果还是可以,也就是满足了要求, 但是后来使用实际打印机的时候,打印出来的效果简直大相径庭啊,本来应该满满的一页,可是在打印出来的纸上却只有中间一点点,请问哪位高手可以指点指点啊,急啊!!!急啊!!!急啊!!!急啊!!!急啊!!!急啊!!!急啊!!!急啊!!!急啊!!!急啊!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 分辨率的原因。打印的时候使用物理单位(英寸、厘米等)就可以了。英寸=像素 /分辨率dpi。 屏幕分辨率才96dpi, 打印机一般都有1200dpi以上,使用像素作为单位打印的话,不小才怪。 当然是在代码里面设置:例如代码: MoveTo(0, 0); LineTo(0, 96);因为屏幕的分辨率为96 dpi, 因此上面的语句是在屏幕上划96像素(96/96=1英寸)的线.当同样的代码不加修改的作用在打印机上时,他画出的线长是(假设打印机的分辨率是1200dpi):96/1200=0.08英寸。当然就差远了,所以正确的做法是:1。 使用统一的单位。使用SetMapMode 来设定一个要使用的映射模式,如:MM_HIMETRIC 使用0.01厘米作为逻辑单位。一厘米长的线等价于100个逻辑单位。该单位(厘米)是物理单位,与分辨率无关,所以就可以同用于各种显示设备、打印设备了。需要注意的是每一种映射的坐标系方向不一定相同, 选定某种映射后,就需要按照该映射的坐标系来作图了。专业图形软件一般是用这种方式。2。 使用单位转换。如果是非常简单的应用,不想那么复杂的话,可以进行简单的换算。如下语句:MoveTo(0,0);LineTO(0, 96);通常以屏幕显示地为准,那么它画的线长约(96/屏幕分辨率96dpi = 1英寸).下面的目标是在打印机上也能划出1英寸长的线。首先获取打印机的分辨率(GetCapbility之类的冬冬)p(架设p=1200).然后计算出所需要的像素 1 * 1200 = 1200.上面的语句就变成了MoveTo(0, 0);LineTo(0, 1200);上面只是详细的列出的原理性的过程,实际代码中可以简单的计算出一个比例,每次使用坐标的时候乘上一个比例就可以了。 MFC ado查询功能的错误 CMainFrame的OnClose问题 Directx的一个例子大家看看错在哪里? 通过IHTMLScriptElement获取script 如何显示HINT的消息,就是象鼠标放到最小化按钮上就出现的那个提示一样 请问在一个button控件中如何向父窗体发送自定义消息 建立连接的问题 求救!高分相送,不够再添!关于obj文件的反编译 谁有 《VISUAL C++ 实践与提高 数据库篇》 的源代码 。烦请 送我一份 关于水晶报表put_SQLQueryString, 如果没有查不到, 能不能提示用户呢 在LINUX里 建立帐户 (初学者) 请问个关于串口的问题
例如代码:
MoveTo(0, 0);
LineTo(0, 96);因为屏幕的分辨率为96 dpi, 因此上面的语句是在屏幕上划96像素(96/96=1英寸)的线.
当同样的代码不加修改的作用在打印机上时,他画出的线长是(假设打印机的分辨率是1200dpi):
96/1200=0.08英寸。当然就差远了,所以正确的做法是:
1。 使用统一的单位。
使用SetMapMode 来设定一个要使用的映射模式,如:MM_HIMETRIC 使用0.01厘米作为逻辑单位。
一厘米长的线等价于100个逻辑单位。
该单位(厘米)是物理单位,与分辨率无关,所以就可以同用于各种显示设备、打印设备了。
需要注意的是每一种映射的坐标系方向不一定相同, 选定某种映射后,就需要按照该映射的坐标系来作图了。
专业图形软件一般是用这种方式。2。 使用单位转换。
如果是非常简单的应用,不想那么复杂的话,可以进行简单的换算。如下语句:
MoveTo(0,0);
LineTO(0, 96);
通常以屏幕显示地为准,那么它画的线长约(96/屏幕分辨率96dpi = 1英寸).下面的目标是在打印机上也能划出1英寸长的线。
首先获取打印机的分辨率(GetCapbility之类的冬冬)p(架设p=1200).
然后计算出所需要的像素 1 * 1200 = 1200.
上面的语句就变成了
MoveTo(0, 0);
LineTo(0, 1200);上面只是详细的列出的原理性的过程,实际代码中可以简单的计算出一个比例,每次使用坐标的时候乘上一个比例就可以了。