发布一个自己写的PrintPreviewControl自定义控件,支持鼠标滚轮,源代码下载。
2006-08-11 18:06
429 查看
先说一下上次发布的 “ 发布一个支持大量文本打印的PrintDocument派生对象,公开源代码”
的文章,我发布了一个继承与System.Drawing.Printing.PrintDocument的对象,这个对象支持从文件流和文本字符串内生成打印作业文档,当时我没有仔细测试,发现其中有一个很大的逻辑bug。
bug的表现是假如你使用字符串赋值的办法生成对象实例,那么打印预览的时候你会惊奇的发现预览的时候文档内容打印了两遍。而我后来才发现这个问题。
经过查找,我发现了原因,但这个原因很奇妙。
原理是,我为了一次读取一行文本,我使用了System.IO.StringReader类作为读取器。而它的构造函数就是传递进来的保存文本内容的字符串,然后使用 StringReader.ReadLine() 方法来读取文本,生成打印的内容。
但是我必须要实现一个机制,这个机制用来检查读取器是否读取到最后的内容,而StringReader.Peek()方法就是检测后面是否有内容,如果没有内容就返回-1值。而经过我的测试,无论是否怎样检测,都不返回-1,而是把内容输入两遍后才返回-1,这样就导致同样的内容显示了两遍。
这个bug已经修改,我通过其他的办法修改了检测手段,这次无需打两次内容了。请下载的各位重新下载一次。
现在开始说PrintPreveiwControl控件。
首先要提醒大家注意的是,它是一个自定义windows 控件,而不是新的打印预览窗口。它就是打印预览窗口中显示打印预览的那部分内容,如果大家要使用的话,必须建立一个windows窗体,然后使用它既可。
说实话,微软在.net中自带的打印预览窗口非常不好,即不好看,也不好用,所以微软就提供了一个System.Windows.Forms.PrintPreviewControl控件,而这个控件也不太好,主要是不支持鼠标滚轮,另外最重要的就是不支持打印页面计数,而打印预览时的可用页面数目是打印预览窗口中“上页”,“下页”这样的按钮所必须的属性。
所以我使用了Reflector反编译了微软的PrintPreviewControl控件,使用它的原始代码并添加了“OnMouseWheel”事件处理程序,而OnMouseWheel就是专门处理鼠标滚轮滚动时的操作的。同样公布源代码。
OnMouseWheel方法内我添加了大量注释,有要处理鼠标滚轮的朋友可以根据这个代码的原理来发挥。
下载: 单击此处下载
另外:
上次的TextPrintDocument我也添加了大量注释,大家可以参考。
的文章,我发布了一个继承与System.Drawing.Printing.PrintDocument的对象,这个对象支持从文件流和文本字符串内生成打印作业文档,当时我没有仔细测试,发现其中有一个很大的逻辑bug。
bug的表现是假如你使用字符串赋值的办法生成对象实例,那么打印预览的时候你会惊奇的发现预览的时候文档内容打印了两遍。而我后来才发现这个问题。
经过查找,我发现了原因,但这个原因很奇妙。
原理是,我为了一次读取一行文本,我使用了System.IO.StringReader类作为读取器。而它的构造函数就是传递进来的保存文本内容的字符串,然后使用 StringReader.ReadLine() 方法来读取文本,生成打印的内容。
但是我必须要实现一个机制,这个机制用来检查读取器是否读取到最后的内容,而StringReader.Peek()方法就是检测后面是否有内容,如果没有内容就返回-1值。而经过我的测试,无论是否怎样检测,都不返回-1,而是把内容输入两遍后才返回-1,这样就导致同样的内容显示了两遍。
这个bug已经修改,我通过其他的办法修改了检测手段,这次无需打两次内容了。请下载的各位重新下载一次。
现在开始说PrintPreveiwControl控件。
首先要提醒大家注意的是,它是一个自定义windows 控件,而不是新的打印预览窗口。它就是打印预览窗口中显示打印预览的那部分内容,如果大家要使用的话,必须建立一个windows窗体,然后使用它既可。
说实话,微软在.net中自带的打印预览窗口非常不好,即不好看,也不好用,所以微软就提供了一个System.Windows.Forms.PrintPreviewControl控件,而这个控件也不太好,主要是不支持鼠标滚轮,另外最重要的就是不支持打印页面计数,而打印预览时的可用页面数目是打印预览窗口中“上页”,“下页”这样的按钮所必须的属性。
所以我使用了Reflector反编译了微软的PrintPreviewControl控件,使用它的原始代码并添加了“OnMouseWheel”事件处理程序,而OnMouseWheel就是专门处理鼠标滚轮滚动时的操作的。同样公布源代码。
OnMouseWheel方法内我添加了大量注释,有要处理鼠标滚轮的朋友可以根据这个代码的原理来发挥。
下载: 单击此处下载
另外:
上次的TextPrintDocument我也添加了大量注释,大家可以参考。
相关文章推荐
- 发布一个自己写的PrintPreviewControl自定义控件,支持鼠标滚轮,源代码下载
- 发布一个自己写的PrintPreviewControl自定义控件,支持鼠标滚轮,源代码下载
- 发布一个自己写的PrintPreviewControl自定义控件,支持鼠标滚轮,源代码下载
- 自己写的一个简单的迅雷下载支持断点续传
- 网上只写了一个文件断点下载的例子! 我仿照别人得例子 自己增加了自己代码,异步下载文件 支持断点下载 多任务下载! 如有问题 请联系我
- Silverlight中创建自己的Behavior(为Silverlight添加鼠标双击和滚轮支持)
- 发布一个flv视频下载工具(支持一边下一边播放)
- 自己写的一个分页控件,欢迎下载源代码
- 发布一个自己写的文件重命名工具,支持正则表达式替换和自定义规则。
- 官方发布的新版本Qt已经不支持XP了,要自己从源代码编译
- 自己写的一个小巧的Rating,源代码下载
- 打造一个perfect的linux开发环境(加入对鼠标滚轮的支持)
- 本文教你如何使用autoconf、automake等来制作一个以源代码形式(.tar.gz)发布的软件、并可在执行configure时使用自定义参数。
- [Javascript]发布一个自己写的日期控件:DateTimeList
- 支持群聊+语音聊天+高仿QQ源码下载 (android前端+JAVA后台+spark<windows版聊天>)方便集成到自己系统
- 一个用于专利下载的Delphi源代码程序
- 使DataGrid支持鼠标滚轮滚动记录
- 一个难题: 怎样写一个输出自己源代码的程序?
- 发布这几天学习Hook搞出来的一个挺好玩的统计鼠标移动距离和键盘敲击次数的小程序
- 支持IE和Firefox的鼠标滚轮事件JavaScript代码