在Form1中添加兩個(gè)PictureBox控件,其中Picture2為源,Picture1為拷貝目標(biāo),將兩者的ScaleMode都設(shè)置為3-Pixel將兩者的AutoRedraw屬性都設(shè)置為True,然后分別添加圖像。在加入一個(gè)Timer控件以及一個(gè)CommandButton控件,然后在Form1的代碼窗口中添加如下代碼:
Dim lTime As Byte
Sub ShowTransparency(cSrc As PictureBox, cDest As PictureBox, _
ByVal nLevel As Byte)
Dim LrProps As rBlendProps
Dim LnBlendPtr As Long
cDest.Cls
LrProps.tBlendAmount = nLevel
CopyMemory LnBlendPtr, LrProps, 4
With cSrc
AlphaBlend cDest.hDC, 0, 0, .ScaleWidth, .ScaleHeight, _
.hDC, 0, 0, .ScaleWidth, .ScaleHeight, LnBlendPtr
End With
cDest.Refresh
End Sub
Private Sub Command1_Click()
lTime = 0
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
lTime = lTime + 1
ShowTransparency Picture2, Picture1, lTime
If lTime >= 255 Then
Timer1.Enabled = False
End If
Me.Caption = Str(Int(lTime / 2.55)) + "%"
End Sub
運(yùn)行程序,點(diǎn)擊Command1,就可以看到Picture2圖像拷貝到Picture1上的淡入淡出效果了。
在結(jié)構(gòu)rBlendProps中,最重要的參數(shù)就是tBlendAmount,該值決定了源與目標(biāo)之間的透明程序。如果為0的話,源完全透明,如果為255的話,源完全覆蓋目標(biāo)。
另外AlphaBlend 函數(shù)不只用于兩個(gè)PictureBox之間的拷貝,而且可以在兩個(gè)Device Context之間的透明拷貝,也就是說,象窗口等控件之間也可以實(shí)現(xiàn)透明效果。不過在編程過程中發(fā)現(xiàn)一個(gè)問題,不知是否是AlphaBlend的Bug,就是在我寫完程序后,并沒有出現(xiàn)透明復(fù)制的效果。搞的我以為該函數(shù)不起作用,但是當(dāng)我再打開VB運(yùn)行上面的程序后,一切有正常了。
我在MSDN上也沒有找到相關(guān)的Bug列表。
相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試成績(jī)查詢時(shí)間匯總
2011計(jì)算機(jī)等級(jí)考試二級(jí)VB考點(diǎn)及習(xí)題匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |