网上有这种控件啊!何必要自己做呢?去下一个来用不就得了?你找不到的话留下Email,我发一个给你
================================================================
[* 我是僵尸我怕谁 *]
================================================================
[* 我是僵尸我怕谁 *]
有现成的最好
但如果自己想做或想知道其实现的一种方法的话
SetCapture
ReleaseCapture
在按钮的MouseMove事件第一次发生的时候SetCapture
在MouseMove的时候对鼠标的坐标进行判断
若坐标的值超出按钮的范围,则ReleaseCapture
大概就是这样的吧
Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function SetCapture Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As LongPrivate Const BF_TOP = &H2
Private Const BF_LEFT = &H1
Private Const BF_RIGHT = &H4
Private Const BF_BOTTOM = &H8
Private Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)Private Const BDR_RAISEDINNER = &H4
Private Const BDR_SUNKENOUTER = &H2Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypePrivate rc As RECTPrivate Sub Form_Load()
Picture1.AutoRedraw = True
End SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
GetClientRect Picture1.hWnd, rc
If x > 0 And x < Picture1.ScaleWidth And y > 0 And y < Picture1.ScaleHeight Then
DrawEdge Picture1.hdc, rc, BDR_RAISEDINNER, BF_RECT
Picture1.Refresh
SetCapture Picture1.hWnd
Else
Picture1.Cls
ReleaseCapture
End If
End SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
DrawEdge Picture1.hdc, rc, BDR_SUNKENOUTER, BF_RECT
Picture1.Refresh
End SubPrivate Sub Picture1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
DrawEdge Picture1.hdc, rc, BDR_RAISEDINNER, BF_RECT
Picture1.Refresh
End Sub
自己做太累了 如过你非要自己做的话给我留言
我给你代码
我提供你一个网站非常好你可以去看看 有你要的东东
www.applevb.com
多给点分呀 我要升级了
用picture控件,准备3张图片鼠标没有移上去用图片1
鼠标移上去用图片2
鼠标点下去用图片3写点代码,做点效果就OK了
很多看起来三维的效果,好多都是眼睛的错觉,只是平面图形巧妙处理一下而已
Private Sub Form_Load()
'image1.picture=loadpicture("路径")
sf = Image1.Left
st = Image1.Top
xf = Image1.Left + Image1.Width
xr = Image1.Top + Image1.Height
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Cls
End Sub
Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Line (sf - 1, st - 1)-(sf - 1, xr + 1), QBColor(15)
Line (sf - 1, st - 1)-(xf + 1, st - 1), QBColor(15)
Line (xf + 1, st - 1)-(xf + 1, xr + 1), QBColor(0)
Line (sf - 1, xr + 1)-(xf + 1, xr + 1), QBColor(0)
End Sub
' 这是简单的,你可以自己处理使图像不闪烁,(如用line 控件,或画直线起始与终点重合)
[email protected]
我去试一下,行得话立即给分~~:)
By Morn
[email protected]