浅谈不同映射模式下的直线输出的效果问题_.Net教程
推荐:怎样在VC中实现淡入淡出的启动画面一日心血来潮,想给启动画面来个淡入淡出,于是去谷歌(google)查了半天,无果。但知道了AnimiateWindow 这个函数。好吧 ,让我们开始吧。首先,请在需要淡入淡出 窗口 的cpp文件或者stdafx.h加入下列代码(注意要加在#include前面哦,否则没有作用哦)。 以下
在做打印预览时:发现有趣的现象。
1:打印预览时宽度设置为0.1mm的线与设置为0.2mm的线显示效果一样,无区别。
打印机输出正常。
2:打印预览时:相同宽度的线有些显示有些不显示。
打印机输出正常。
仔细查看了一下,实际上是映射模式下的显示问题,鉴于映射模式总是让人焦头
烂额,值得总结一下:
开始分析:
第一步;写一个MM_TEXT模式的例子。打印6条竖线,宽度由1递增。
以下为引用的内容: dc.SetMapMode(MM_TEXT); for(int ii=1;ii<=6;ii ) { CPen pen; pen.CreatePen(PS_SOLID,ii,RGB(255,0,0)); CPen *pOldPen = dc.SelectObject(&pen); dc.MoveTo(xStart xInterval*ii,0); dc.LineTo(xStart xInterval*ii,xLineLen); dc.SelectObject(&pOldPen); } |
当然,会输出不同宽度的6条线。
很正常。映射模式是像素为单位。
第二步:模拟一下打印预览下的模式(0.1mm的方式)
以下为引用的内容:
long lLogInch = 254; |
映射:1个单位是0.1mm。
同样用上面的代码输出。
嘿:1,2,3线一样粗,4,5,6线一样粗。
实际打印机输出,粗细是递增的,非常正常。
Why?
第三步:估计是精度问题吧?
看看新的映射模式下:每根线的实际输出像素。
首先,通过long lX = dc.GetDeviceCaps(LOGPIXELSX);
取得当前显示器一个英寸是等于96个像素。
来,算一下:
以下为引用的内容:
|
呵,很好解释了,四舍五入后,1,2,3都是1像素,4,5,6都是2像素。
实际打印机呢? lX = 600.
不用计算了吧,精度高,打印出来当然就OK了。
结论1:
由于显示器的像素点精度问题,在使用Pen进行绘制时,会进行四舍五入,
分享:怎样防止ASP.NET按钮的多次提交网上查了很多方法,都不太好使,不如自己写一个,思路就是把按钮按下时用Javascript在客户端把按钮下一次的onclick事件改为return false; 这样在服务器端页面重新送回客户端之前,再次点击按钮都不会Post到服务端。同时将按钮的style改为一行字的样子,光标
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP发送Email实例(可带附件)
- js实现广告漂浮效果的小例子
- asp.net Repeater 数据绑定的具体实现
- Asp.Net 无刷新文件上传并显示进度条的实现方法及思路
- Asp.net获取客户端IP常见代码存在的伪造IP问题探讨
- VS2010 水晶报表的使用方法
- ASP.NET中操作SQL数据库(连接字符串的配置及获取)
- asp.net页面传值测试实例代码
- DataGridView - DataGridViewCheckBoxCell的使用介绍
- asp.net中javascript的引用(直接引入和间接引入)
- 三层+存储过程实现分页示例代码
- 相关链接:
- 教程说明:
.Net教程-浅谈不同映射模式下的直线输出的效果问题。