小以,估计是你的GetWindowRect函数用得不适当。我避开了这一步,达到了你的目的。 这是我的代码,在一个带有picture1的form1中(实现了浮动效果的图片框)。你可以把下列代码粘贴进去测试,看看自己的问题在哪儿。Option ExplicitPrivate Declare Function DrawEdge Lib "user32" _ (ByVal hDC As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Long
Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End TypePrivate Const BDR_RAISEDINNER = &H4 Private Const BDR_RAISEDOUTER = &H1 Private Const BF_BOTTOM = &H8 Private Const BF_LEFT = &H1 Private Const BF_RIGHT = &H4 Private Const BF_TOP = &H2 Private Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)'''鼠标移到窗体上,图片框恢复正常 Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim uRect As RECT Dim lRet As Long '设置外框 uRect.Left = Picture1.ScaleLeft uRect.Top = Picture1.ScaleTop uRect.Right = Picture1.ScaleWidth: uRect.Bottom = Picture1.ScaleHeight
lRet = DrawEdge(Picture1.hDC, uRect, BDR_RAISEDOUTER, BF_RECT) End Sub '''鼠标移到图片框上,突起一点 Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)Dim uRect As RECT Dim lRet As Long '设置外框 uRect.Left = Picture1.ScaleLeft uRect.Top = Picture1.ScaleTop uRect.Right = Picture1.ScaleWidth: uRect.Bottom = Picture1.ScaleHeight
Private Sub Form_Load() With Picture1 .AutoRedraw = True .BorderStyle = 0 .DrawWidth = 2 End With Picture1.Print Picture1.Print " 退 出" End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Call DrawButton(Picture1, 7, 7) End SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button <> 1 Then Call DrawButton(Picture1, 15, 0) ' tu End If End SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Call DrawButton(Picture1, 0, 15) End If End SubPrivate Sub DrawButton(ob As Object, an As Integer, tu As Integer) Dim a As Integer Dim b As Integer a = ob.Width b = ob.Height ob.Line (0, 0)-(a, 0), QBColor(an) ob.Line (0, 0)-(0, b), QBColor(an) ob.Line (a, 0)-(a, b), QBColor(tu) ob.Line (0, b)-(a, b), QBColor(tu) End Sub
uRect.Right = uRect.Right - uRect.Left
uRect.Top = 0
uRect.Left = 0
GetWindowRect取得的矩形是相對于屏幕左上角的坐標,所以你看不到.
Dim uRect As RECT
Dim lRet As Long
GetWindowRect Picture1.hwnd, uRect
lRet = DrawEdge(Picture1.hdc, uRect, BDR_RAISEDOUTER, BF_RECT)
End Sub-------
这个问题为什么会没人知道??
这是我的代码,在一个带有picture1的form1中(实现了浮动效果的图片框)。你可以把下列代码粘贴进去测试,看看自己的问题在哪儿。Option ExplicitPrivate Declare Function DrawEdge Lib "user32" _
(ByVal hDC As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypePrivate Const BDR_RAISEDINNER = &H4
Private Const BDR_RAISEDOUTER = &H1
Private Const BF_BOTTOM = &H8
Private Const BF_LEFT = &H1
Private Const BF_RIGHT = &H4
Private Const BF_TOP = &H2
Private Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)'''鼠标移到窗体上,图片框恢复正常
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim uRect As RECT
Dim lRet As Long '设置外框
uRect.Left = Picture1.ScaleLeft
uRect.Top = Picture1.ScaleTop
uRect.Right = Picture1.ScaleWidth:
uRect.Bottom = Picture1.ScaleHeight
lRet = DrawEdge(Picture1.hDC, uRect, BDR_RAISEDOUTER, BF_RECT)
End Sub
'''鼠标移到图片框上,突起一点
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)Dim uRect As RECT
Dim lRet As Long '设置外框
uRect.Left = Picture1.ScaleLeft
uRect.Top = Picture1.ScaleTop
uRect.Right = Picture1.ScaleWidth:
uRect.Bottom = Picture1.ScaleHeight
lRet = DrawEdge(Picture1.hDC, uRect, BDR_RAISEDINNER, BF_RECT)
End Sub
我换了这个就行了GetClientRect
With Picture1
.AutoRedraw = True
.BorderStyle = 0
.DrawWidth = 2
End With
Picture1.Print
Picture1.Print " 退 出"
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Call DrawButton(Picture1, 7, 7)
End SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button <> 1 Then
Call DrawButton(Picture1, 15, 0) ' tu
End If
End SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Call DrawButton(Picture1, 0, 15)
End If
End SubPrivate Sub DrawButton(ob As Object, an As Integer, tu As Integer)
Dim a As Integer
Dim b As Integer
a = ob.Width
b = ob.Height
ob.Line (0, 0)-(a, 0), QBColor(an)
ob.Line (0, 0)-(0, b), QBColor(an)
ob.Line (a, 0)-(a, b), QBColor(tu)
ob.Line (0, b)-(a, b), QBColor(tu)
End Sub