我在測驗的程序中發現:
如果新建一個PictureBox,直接使用
Bitblt API函式將圖繪制在他上面:
如下:
Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Sub Command1_Click()
Picture2.AutoRedraw = True '這里將autoredraw設定為true,可以打開一個記憶體繪圖緩沖區
BitBlt Picture2.hDC, 0, 0, 300, 300, Picture1.hDC, 0, 0, vbSrcCopy ' 將影像繪制到緩沖區中,并沒有寫入PictureBox
Picture2.Refresh '將緩沖區中的內容沉淀到PictureBox中
Picture2.AutoRedraw = False '重新禁止圖片框中的資料被覆寫。
End Sub
則圖片框在被其他視窗遮住后,可以正常重繪。保持住我使用Bitblt繪制的圖。
而。如果我使用的Picture1.Picture=LoadPicture(檔案路徑) 這種方式為PictureBox設定圖片的話
使用Bitblt繪制上去的圖就沒法保持。不知道為何會這樣。
uj5u.com熱心網友回復:
autoredraw設定為true,實際上是為視窗創建一個記憶體快取區,之所以能保存背景是因為記憶體快取區隨時拷貝到視窗的快取區,但bitblt是復制到真正視頻的hdc中,因此不能保存你可以嘗試一下:
Private Sub Command1_Click()
Picture2.AutoRedraw = false'這里將autoredraw設定為true,可以打開一個記憶體繪圖緩沖區 BitBlt Picture2.hDC, 0, 0, 300, 300, Picture1.hDC, 0, 0, vbSrcCopy ' 將影像繪制到緩沖區中,并沒有寫入PictureBox Picture2.Refresh '將緩沖區中的內容沉淀到PictureBox中 Picture2.AutoRedraw = true '按照ms說,這樣處理會將物理的hdc內容拷貝到記憶體hdc
End Sub
uj5u.com熱心網友回復:
暈,好像說錯了,你看看這個吧,以前寫的http://blog.csdn.net/worldy/article/details/7381106
uj5u.com熱心網友回復:
這個問題我會過一段時間徹底測驗下!uj5u.com熱心網友回復:
還沒測驗完嗎,趕緊結帖哦:)
uj5u.com熱心網友回復:
還沒有呢,再等會。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/103806.html
標籤:VB基礎類
上一篇:【長期更新】VB類別庫集合
下一篇:如何合并多個excel檔案
