比较正规的方法是用setwindowrgn实现,下面是一个简单的例子: Option Explicit Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Sub Form_Load() Dim mRGN As Long mRGN = CreateEllipticRgn(0, 0, Picture1.Width / Screen.TwipsPerPixelX, Me.Picture1.Height / Screen.TwipsPerPixelY) 'Set the window region SetWindowRgn Me.Picture1.hWnd, mRGN, True 'delete our elliptical region DeleteObject mRGN '表明不显示窗体中的透明色,而第二个参数表示透明色为蓝色,并且你可以用RGB函数来指定颜色值 End Sub难点是如果图片位数很高的话,找不到什么好方法快速的创建所需要的区域
如果图片的颜色数不多,可以转成背景透明的GIF,然后用IMAGE控件来显示
Picture1.ScaleMode = vbPixels '显示的图
Picture2.ScaleMode = vbPixels '原来的图,
Picture2.AutoRedraw = TruePicture2.PaintPicture Picture1.Picture, 27, 37, 27, 37, 139, 87, 27, 37, vbSrcAnd
Picture2.PaintPicture Picture1.Picture, 27, 37, 27, 37, 85, 87, 27, 37, vbSrcInvertNext
我就是这么做的,你看看合适你不。
还有一个方法就是不要使用PictureBox控件,而直接使用API: TransparentBlt,指定一个透明色之后直接将图像输出到窗体上,因为即使你使用这个API将图像透明输出到PictureBox上,PictureBox控件本身也会挡住下面的内容的。
Option Explicit
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Sub Form_Load()
Dim mRGN As Long
mRGN = CreateEllipticRgn(0, 0, Picture1.Width / Screen.TwipsPerPixelX, Me.Picture1.Height / Screen.TwipsPerPixelY)
'Set the window region
SetWindowRgn Me.Picture1.hWnd, mRGN, True
'delete our elliptical region
DeleteObject mRGN '表明不显示窗体中的透明色,而第二个参数表示透明色为蓝色,并且你可以用RGB函数来指定颜色值
End Sub难点是如果图片位数很高的话,找不到什么好方法快速的创建所需要的区域