VB.net中实现打印窗体

VB.net中实现打印窗体

来源:MSDN http://msdn.microsoft.com/library/


Imports System
Imports System.Drawing.Printing
Public Class Form1
    <System.Runtime.InteropServices.DllImport("gdi32.dll")> _
   Public Shared Function BitBlt(ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As Integer) As Boolean
    End Function
    <System.Runtime.InteropServices.DllImport("User32.dll")> _
    Public Shared Function GetWindowDC(ByVal hwd As IntPtr) As IntPtr
    End Function
    <System.Runtime.InteropServices.DllImport("User32.dll")> _
    Public Shared Function ReleaseDC(ByVal hwd As IntPtr, ByVal dc As IntPtr) As Integer
    End Function
    <System.Runtime.InteropServices.DllImport("user32.dll")> _
    Public Shared Function GetWindowRect(ByVal hWnd As IntPtr, ByRef lpRect As RECT) As Boolean
    End Function
    <Serializable(), System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)> _
    Public Structure RECT
        Public Left As Integer
        Public Top As Integer
        Public Right As Integer
        Public Bottom As Integer
    End Structure
    Private memoryImage As Bitmap
    Private Sub CaptureScreen()
        Dim mygraphics As Graphics = Me.CreateGraphics()
        Dim r As RECT
        GetWindowRect(Me.Handle, r)
        Dim s As Rectangle = Rectangle.FromLTRB(r.Left, r.Top, r.Right, r.Bottom)
        memoryImage = New Bitmap(s.Width, s.Height, mygraphics)
        Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
        Dim dc1 As IntPtr = GetWindowDC(Me.Handle)
        Dim dc2 As IntPtr = memoryGraphics.GetHdc()
        BitBlt(dc2, 0, 0, s.Width, s.Height, dc1, 0, 0, 13369376)
        ReleaseDC(Me.Handle, dc1)
        memoryGraphics.ReleaseHdc(dc2)
    End Sub
    Private Sub Document_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
        e.Graphics.DrawImage(memoryImage, 0, 0)
    End Sub
    Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        CaptureScreen()
        PrintDialog1.ShowDialog()
        Dim pd As PrintDocument = New PrintDocument
        pd.PrinterSettings = PrintDialog1.PrinterSettings
        AddHandler pd.PrintPage, AddressOf Document_PrintPage
        pd.Print()
    End Sub

http://msdn.microsoft.com/library/chs/default.asp?url=/library/chs/dv_vbCode/html/vbtskCodeExamplePrintingForm.asp

Visual Basic 2003:代码  

代码:打印 Windows 窗体 (Visual Basic)
此示例打印当前窗体的副本。

示例
Private Declare Function BitBlt Lib "gdi32.dll" Alias "BitBlt" (ByVal _
   hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As _
   Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal _
   hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, _
   ByVal dwRop As System.Int32) As Long
Dim memoryImage As Bitmap
Private Sub CaptureScreen()
   Dim mygraphics As Graphics = Me.CreateGraphics()
   Dim s As Size = Me.Size
   memoryImage = New Bitmap(s.Width, s.Height, mygraphics)
   Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
   Dim dc1 As IntPtr = mygraphics.GetHdc
   Dim dc2 As IntPtr = memoryGraphics.GetHdc
   BitBlt(dc2, 0, 0, Me.ClientRectangle.Width, _
      Me.ClientRectangle.Height, dc1, 0, 0, 13369376)
   mygraphics.ReleaseHdc(dc1)
   memoryGraphics.ReleaseHdc(dc2)
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, _
   ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
   PrintDocument1.PrintPage
   e.Graphics.DrawImage(memoryImage, 0, 0)
End Sub
Private Sub PrintButton_Click(ByVal sender As System.Object, ByVal e As _
   System.EventArgs) Handles PrintButton.Click
   CaptureScreen()
   PrintDocument1.Print()
 End Sub
编译代码
此示例需要:

窗体上名为 PrintDocument1 的 PrintDocument 组件。
名为 PrintButton 的 Button 控件。在单击 PrintButton 时,就会打印该窗体。
可靠编程
以下条件可能会导致异常:

您没有访问该打印机的权限。
您没有使用非托管代码的权限。
没有安装打印机。
安全性
为了运行此示例,您必须具有执行非托管代码和访问打印机的权限。

请参见
使用 PrintDocument 组件打印 | 用 GDI+ 呈现图像 | 在 Windows 窗体中打印图形 | PrintDocument 类 | Visual Basic 代码示例主题 | 图形示例主题 | Windows 应用程序示例主题
http://msdn.microsoft.com/library/chs/default.asp?url=/library/chs/dv_vbCode/html/vbtskCodeExamplePrintingForm.asp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值