首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 图形图象-> 相关软件
NET中打印包含有格式的 RichTextBox 的内容-.NET教程,Asp.Net开发
作者:网友供稿 点击:201
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
概要
本文逐步说明如何打印 richtextbox 控件的内容。richtextbox 控件不提供打印其内容的方法。但是,您可以扩展 richtextbox 类以使用 em_formatrange 消息。然后,您可以将 richtextbox 的内容发送到某个输出设备,例如打印机。


创建 richtextboxprintctrl 控件
要扩展 richtextbox 类并使用 em_formatrange 来打印 richtextbox 控件的内容,请按照下列步骤操作: 1. 使用 microsoft visual basic .net 新建一个名为 richtextboxprintctrl 的类库项目。

默认情况下,将创建 class1.vb。
2. 将 class1.vb 文件的名称更改为 richtextboxprintctrl.vb。
3. 在解决方案资源管理器中,右键单击“引用”,然后单击“添加引用”。
4. 在添加引用对话框中,双击“system.drawing.dll”,然后双击“system.windows.forms.dll”。
5. 要添加引用,请单击“确定”。
6. 删除“richtextboxprintctrl.vb”中的现有节点。
7. 将以下代码复制到“richtextboxprintctrl.vb”中:
option explicit on

imports system
imports system.windows.forms
imports system.drawing
imports system.runtime.interopservices
imports system.drawing.printing

namespace richtextboxprintctrl
public class richtextboxprintctrl
inherits richtextbox
convert the unit that is used by the .net framework (1/100 inch)
and the unit that is used by win32 api calls (twips 1/1440 inch)
private const aninch as double = 14.4

<structlayout(layoutkind.sequential)> _
private structure rect
public left as integer
public top as integer
public right as integer
public bottom as integer
end structure

<structlayout(layoutkind.sequential)> _
private structure charrange
public cpmin as integer first character of range (0 for start of doc)
public cpmax as integer last character of range (-1 for end of doc)
end structure

<structlayout(layoutkind.sequential)> _
private structure formatrange
public hdc as intptr actual dc to draw on
public hdctarget as intptr target dc for determining text formatting
public rc as rect region of the dc to draw to (in twips)
public rcpage as rect region of the whole dc (page size) (in twips)
public chrg as charrange range of text to draw (see above declaration)
end structure

private const wm_user as integer = &h400
private const em_formatrange as integer = wm_user + 57

private declare function sendmessage lib "user32" alias "sendmessagea" (byval hwnd as intptr, byval msg as integer, byval wp as intptr, byval lp as intptr) as intptr

render the contents of the richtextbox for printing
return the last character printed + 1 (printing start from this point for next page)
public function print(byval charfrom as integer, byval charto as integer, byval e as printpageeventargs) as integer

mark starting and ending character
dim crange as charrange
crange.cpmin = charfrom
crange.cpmax = charto

calculate the area to render and print
dim recttoprint as rect
recttoprint.top = e.marginbounds.top * aninch
recttoprint.bottom = e.marginbounds.bottom * aninch
recttoprint.left = e.marginbounds.left * aninch
recttoprint.right = e.marginbounds.right * aninch

calculate the size of the page
dim rectpage as rect
rectpage.top = e.pagebounds.top * aninch
rectpage.bottom = e.pagebounds.bottom * aninch
rectpage.left = e.pagebounds.left * aninch
rectpage.right = e.pagebounds.right * aninch

dim hdc as intptr = e.graphics.gethdc()

dim fmtrange as formatrange
fmtrange.chrg = crange indicate character from to character to
fmtrange.hdc = hdc use the same dc for measuring and rendering
fmtrange.hdctarget = hdc point at printer hdc
fmtrange.rc = recttoprint indicate the area on page to print
fmtrange.rcpage = rectpage indicate whole size of page

dim res as intptr = intptr.zero

dim wparam as intptr = intptr.zero
wparam = new intptr(1)

move the pointer to the formatrange structure in memory
dim lparam as intptr = intptr.zero
lparam = marshal.alloccotaskmem(marshal.sizeof(fmtrange))
marshal.structuretoptr(fmtrange, lparam, false)

send the rendered data for printing
res = sendmessage(handle, em_formatrange, wparam, lparam)

free the block of memory allocated
marshal.freecotaskmem(lparam)

release the device context handle obtained by a previous call
e.graphics.releasehdc(hdc)

return last + 1 character printer
return res.toint32()
end function

end class
end namespace


8. 要创建“richtextboxprintctrl.dll”,请在“生成”菜单上单击“生成解决方案”。

测试控件
要测试该控件,请按照下列步骤操作: 1. 使用 visual basic .net 新建一个 windows 应用程序项目。

默认情况下,将创建 form1.vb。
2. 从工具箱中,将一个按钮拖到 form1 上。将名称更改为 btnpagesetup,然后将“文本”更改为页面设置。
3. 从工具箱中,将另一个按钮拖到 form1 上。将名称更改为 btnprintpreview,然后将“文本”更改为打印预览。
4. 从工具箱中,将另一个按钮拖到 form1 上。将名称更改为 btnprint,然后将“文本”更改为打印。
5. 在工具箱中,依次双击“printdialog”、“printpreviewdialog”和“printdocument”,然后双击“pagesetupdialog”将这些控件添加到 form1 中。
6. 将“printdialog1”、“printpreviewdialog1”和“pagesetupdialog1”的 document 属性修改为printdocument1。
7. 在“工具”菜单上,单击“自定义工具箱”。
8. 单击“.net framework 组件”,单击“浏览”,单击以选择“richtextboxprintctrl.dll”,然后单击“确定”。
9. 从工具箱中,将“richtextboxprintctrl”拖到 form1 上。
10. 在解决方案资源管理器中,右键单击“form1.vb”,然后单击“查看代码”。
11. 将以下代码添加到 form1 类中:
private checkprint as integer

private sub printdocument1_beginprint(byval sender as object, byval e as system.drawing.printing.printeventargs) handles printdocument1.beginprint
checkprint = 0
end sub

private sub printdocument1_printpage(byval sender as object, byval e as system.drawing.printing.printpageeventargs) handles printdocument1.printpage
print the content of the richtextbox. store the last character printed.
checkprint = richtextboxprintctrl1.print(checkprint, richtextboxprintctrl1.textlength, e)

look for more pages
if checkprint < richtextboxprintctrl1.textlength then
e.hasmorepages = true
else
e.hasmorepages = false
end if
end sub

private sub btnpagesetup_click(byval sender as system.object, byval e as system.eventargs) handles btnpagesetup.click.click
pagesetupdialog1.showdialog()
end sub

private sub btnprint_click(byval sender as system.object, byval e as system.eventargs) handles btnprint.click
if printdialog1.showdialog() = dialogresult.ok then
printdocument1.print()
end if
end sub

private sub btnprintpreview_click(byval sender as system.object, byval e as system.eventargs) handles btnprintpreview.click
printpreviewdialog1.showdialog()
end sub

12. 要运行该应用程序,请单击“调试”菜单上的“开始”。
13. 在“richtextboxprintctrl”中键入文本。
14. 要设置页面设置,请单击“页面设置”。
15. 要预览该页,请单击“打印预览”。
16. 要打印“richtextboxprintctrl”的内容,请单击“打印”。

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·使用C#在进度条中显示复制文件的进度-.NET教程,C#语言
·JAVASCRIPT调用JAVA-JSP教程,Java技巧及代码
·Java开源项目Hibernate包作用详解-JSP教程,Java技巧及代码
·新型单相逆变电源的研制
·解读Windows 2000/XP分层驱动模型-.NET教程,Windows开发
·NET中打印包含有格式的 RichTextBox 的内容-.NET教程,Asp.Net开发
·java用于链接数据库的例子(*.properties)-JSP教程,资料/其它
·cable modem及其系统的配置和使用
·asp.net 1.1/ 2.0 中快速实现单点登陆-.NET教程,Asp.Net开发
·持续集成 Java手册-JSP教程,Java技巧及代码
最新文章
·像我一样的菜鸟站长常犯的几种错误_站长心得
·网友开博客真的能赚钱吗?_网赚技巧
·google广告代码可以放到几个网站吗?_网赚技巧
·论坛如何最佳化?adsense最佳化案例_网赚技巧
·姚劲波:站长要用开放平和的心态去坚持_站长访谈
·章征军和他的站长网_站长访谈
·建自己想建的站坚持下去 就是最好的seo_站长心得
·autocad 2008的service pack 1测试版发布_autocad教程
·网站的定位在于选题(后半部分参考市场报)_站长心得
·互联网赚钱的几种基本模式_站长心得
相关主题
西部数码虚拟主机

友情链接
CNNIC 西部数码
万网 自助建站
虚拟主机 asp空间
域名注册 域名
域名申请 主页空间
论坛空间 网站空间
国际域名 虚拟空间
空间租用 DDOS防火墙
成都主机托管 四川主机托管
主机租用 服务器租用
网站目录 自助建站
虚拟主机 网址大全
软件下载
自助链接
虚拟主机资讯 特价虚拟主机
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论 打印  刷新     关闭