首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

利用BitBlt画的图,怎么重画

2012-02-16 
利用BitBlt画的图,如何重画?用BitBlt在PictureBox上画图成功,但如果把PictureBox前面挡住的窗口移走后,Pic

利用BitBlt画的图,如何重画?
用BitBlt在PictureBox上画图成功,但如果把PictureBox前面挡住的窗口移走后,PictureBox被挡住部分没有更新,请问应该如何刷新呢?用OnPaint事件也不行。


Public Class Form1

  Declare Auto Function BitBlt Lib "GDI32.DLL" ( _
  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 Int32) As Boolean

  Private Const ROP_SrcCopy As Integer = &HCC0020


  Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Integer, ByVal hObject As Integer) As Integer



  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
   
  TestBitBlt()
  End Sub

  Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
   
  End Sub


  Private Sub TestBitBlt()
  Dim bmp As Bitmap = Image.FromFile("C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Sunset.jpg")

  Dim g1 As Graphics = Graphics.FromImage(bmp)
  Dim g2 As Graphics = Me.PictureBox1.CreateGraphics
  Dim hdc1 As IntPtr = g1.GetHdc
  Dim hdc2 As IntPtr = g2.GetHdc
  SelectObject(hdc1, bmp.GetHbitmap()) '
  BitBlt(hdc2, 0, 0, bmp.Width, bmp.Height, hdc1, 0, 0, ROP_SrcCopy)
  g1.ReleaseHdc()
  g2.ReleaseHdc()
  g1.Dispose()
  g2.Dispose()
  End Sub

   
End Class

[解决办法]
直接用GDI好了 
Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint

Dim bmp As Bitmap = Image.FromFile("C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Sunset.jpg")

Dim g As Graphics = e.Graphics
g.DrawImage(bmp, 0, 0)
End Sub

然后其他地方用PictureBox.Invalidate()就可以清除了 也能达到你想要的效果
[解决办法]
OnPaint里面g2不要用CreateGraphics,用e.Graphics
后面也不能Dispose g2,Hdc要释放掉。

热点排行