我只是想做个mouse 移到picture上,有3D效果而已,为什么无反应??

解决方案 »

  1.   

    uRect.Bottom = uRect.Bottom - uRect.Top
    uRect.Right = uRect.Right - uRect.Left
    uRect.Top = 0
    uRect.Left = 0
    GetWindowRect取得的矩形是相對于屏幕左上角的坐標,所以你看不到.
      

  2.   

    Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        
        Dim uRect               As RECT
        Dim lRet                As Long
        
        GetWindowRect Picture1.hwnd, uRect
        lRet = DrawEdge(Picture1.hdc, uRect, BDR_RAISEDOUTER, BF_RECT)
    End Sub-------
    这个问题为什么会没人知道??
      

  3.   

    小以,估计是你的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
           
       lRet = DrawEdge(Picture1.hDC, uRect, BDR_RAISEDINNER, BF_RECT)
          
    End Sub
     
     
      

  4.   

    是这个用错了GetWindowRect
    我换了这个就行了GetClientRect
      

  5.   

    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