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

pictureBOX切圆角的有关问题

2012-04-19 
pictureBOX切圆角的问题不知那位大侠能用单一picturebox 完成,现在我是用2个picturebox来完成这个问题或者

pictureBOX切圆角的问题
不知那位大侠能用单一picturebox 完成,现在我是用2个picturebox来完成这个问题
或者还有别的办法能实现,请各位赐教。

代码如下(需要在窗体上添加一个picture1,然后在picture1中放一个和picture1一样大小的picture2.picture2中随意加载一张图片和一个按钮)

VB code
Option ExplicitPrivate Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongPrivate Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As LongPrivate Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As LongPrivate Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As LongPrivate Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongPrivate Const RGN_AND = 1Private MyRgn1 As LongPrivate MyRgn2 As LongPrivate MyRgn As Long '保存圆角区域,也是窗体最终的形状Private Sub Command1_Click()SetRei Picture2Picture2.RefreshEnd SubPrivate Sub Form_Load()picture1.AutoRedraw =True picture2.AutoRedraw =True End SubPrivate Sub Form_Click()Unload MeEnd SubPrivate Sub Form_Unload(Cancel As Integer)   '删除非空区域If MyRgn <> 0 Then DeleteObject MyRgnIf MyRgn1 <> 0 Then DeleteObject MyRgn1If MyRgn2 <> 0 Then DeleteObject MyRgn2End SubSub SetRei(Box As Object)Dim w As Long, h As Longw = ScaleX(Box.Width, vbTwips, vbPixels)h = ScaleY(Box.Height, vbTwips, vbPixels)'四角都为圆角MyRgn = CreateRoundRectRgn(5, 5, w - 2, h - 2, 16, 16)'--------------------------------------------------Call SetWindowRgn(Box.hWnd, MyRgn, True)  '改变窗口的区域为"MyRgn"End Sub


[解决办法]
用一个PictureBox是可以的,把Picture2删除了,只要picture1。下面的程序,我试过可以的:
VB code
Option ExplicitPrivate Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongPrivate Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As LongPrivate Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As LongPrivate Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As LongPrivate Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongPrivate Const RGN_AND = 1Private MyRgn1 As LongPrivate MyRgn2 As LongPrivate MyRgn As Long '保存圆角区域,也是窗体最终的形状Private Sub Command1_Click()SetRei Picture1Picture1.RefreshEnd SubPrivate Sub Form_Load()Picture1.AutoRedraw = True'Picture2.AutoRedraw = TrueEnd SubPrivate Sub Form_Click()Unload MeEnd SubPrivate Sub Form_Unload(Cancel As Integer)   '删除非空区域If MyRgn <> 0 Then DeleteObject MyRgnIf MyRgn1 <> 0 Then DeleteObject MyRgn1If MyRgn2 <> 0 Then DeleteObject MyRgn2End SubSub SetRei(Box As Object)Dim w As Long, h As Longw = ScaleX(Box.Width, vbTwips, vbPixels)h = ScaleY(Box.Height, vbTwips, vbPixels)'四角都为圆角MyRgn = CreateRoundRectRgn(5, 5, w - 2, h - 2, 16, 16)'--------------------------------------------------Call SetWindowRgn(Box.hWnd, MyRgn, True)  '改变窗口的区域为"MyRgn"End Sub 

热点排行