Ignore:
Timestamp:
Jul 22, 2008, 1:12:35 AM (16 years ago)
Author:
イグトランス (egtra)
Message:

MouseLeave, MouseHoverが動作するようにした。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/ablib/src/Classes/ActiveBasic/Windows/UI/Control.ab

    r561 r564  
    77Namespace UI
    88
    9 'Namespace Detail
    10 '   TypeDef PTrackMouseEvent = *Function(ByRef tme As TRACKMOUSEEVENT) As BOOL
    11 'End Namespace
     9Namespace Detail
     10    TypeDef PTrackMouseEvent = *Function(ByRef tme As TRACKMOUSEEVENT) As BOOL
     11End Namespace
    1212
    1313Class Control
     
    176176        AddMessageEvent(WM_XBUTTONUP, mu)
    177177        Dim mb = New MessageHandler(AddressOf(OnMouseDblClkBase))
    178         AddMessageEvent(WM_LBUTTONDBLCLK, mu)
    179         AddMessageEvent(WM_RBUTTONDBLCLK, mu)
    180         AddMessageEvent(WM_MBUTTONDBLCLK, mu)
    181         AddMessageEvent(WM_XBUTTONDBLCLK, mu)
     178        AddMessageEvent(WM_LBUTTONDBLCLK, mb)
     179        AddMessageEvent(WM_RBUTTONDBLCLK, mb)
     180        AddMessageEvent(WM_MBUTTONDBLCLK, mb)
     181        AddMessageEvent(WM_XBUTTONDBLCLK, mb)
    182182
    183183        AddMessageEvent(WM_MOUSEMOVE, AddressOf(OnMouseMoveBase))
    184184        AddMessageEvent(WM_MOUSELEAVE, AddressOf(OnMouseLeaveBase))
     185        AddMessageEvent(WM_MOUSEHOVER, AddressOf(OnMouseHoverBase))
    185186        AddMessageEvent(WM_PAINT, AddressOf(OnPaintBase))
    186187        AddMessageEvent(WM_KEYDOWN, AddressOf(OnKeyDownBase))
     
    191192
    192193    Sub OnEraseBackground(sender As Object, e As MessageArgs)
    193         Dim rc = ClientRect
    194         FillRect(e.WParam As HDC, rc, (COLOR_3DFACE + 1) As HBRUSH)
     194        If IsNothing(paintBackground) Then
     195            Dim rc = ClientRect
     196            FillRect(e.WParam As HDC, rc, (COLOR_3DFACE + 1) As HBRUSH)
     197        Else
     198            OnPaintBackground(New PaintBackgroundArgs(e.WParam, e.LParam))
     199        End If
    195200        e.LResult = TRUE
    196201    End Sub
     
    225230            mouseEntered = True
    226231            OnMouseEnter(me)
     232            trackMouseEvent(TME_LEAVE Or TME_HOVER)
    227233        End If
    228234    End Sub
    229235
    230236    Sub OnMouseLeaveBase(sender As Object, e As MessageArgs)
     237        OnMouseLeave(Args.Empty)
     238        mouseEntered = False
     239    End Sub
     240
     241    Sub OnMouseHoverBase(sender As Object, e As MessageArgs)
    231242        Dim me = makeMouseEventFromMsg(e)
    232         OnMouseLeave(me)
    233         mouseEntered = False
     243        OnMouseHover(me)
    234244    End Sub
    235245
     
    415425'   その他の補助関数
    416426Private
    417 '   Sub tracMouseEvent()
    418 /*      If pTrackMouseEvent <> 0 Then
     427    Function trackMouseEvent(flags As DWord) As BOOL
     428        If pTrackMouseEvent <> 0 Then
    419429            Dim tme As TRACKMOUSEEVENT
    420430            With tme
    421431                .cbSize = Len(tme)
    422                 .dwFlags = TME_HOVER Or TME_LEAVE
    423                 .hwndTrack = wnd
     432                .dwFlags = flags
     433                .hwndTrack = hwnd
    424434                .dwHoverTime = HOVER_DEFAULT
    425435            End With
    426             pTrackMouseEvent(tme)
    427         End If
    428 */  'End Sub
     436            trackMouseEvent = pTrackMouseEvent(tme)
     437        End If
     438    End Function
    429439
    430440'--------------------------------
     
    437447    Static atom As ATOM
    438448    Static hmodComctl As HMODULE
    439 '   Static pTrackMouseEvent As PTrackMouseEvent
     449    Static pTrackMouseEvent As Detail.PTrackMouseEvent
    440450
    441451    Static Const WindowClassName = "ActiveBasic.Windows.UI.Control"
     
    445455        tlsIndex = TlsAlloc()
    446456        hInstance = hinst
    447 '       hmodComctl = LoadLibrary("comctl32.dll")
    448 '       pTrackMouseEvent = GetProcAddress(hmodComctl, ToMBStr("_TrackMouseEvent"))
     457        hmodComctl = LoadLibrary("comctl32.dll")
     458        pTrackMouseEvent = GetProcAddress(hmodComctl, ToMBStr("_TrackMouseEvent")) As Detail.PTrackMouseEvent
    449459
    450460        Dim PropertyInstanceString = WindowClassName + " " + Hex$(GetCurrentProcessId())
     
    483493            TlsFree(tlsIndex)
    484494        End If
    485 '       If hmodComctl <> 0 Then
    486 '           FreeLibrary(hmodComctl)
    487 '       End If
     495        If hmodComctl <> 0 Then
     496            FreeLibrary(hmodComctl)
     497        End If
    488498        If PropertyInstance <> 0 Then
    489499            GlobalDeleteAtom(PropertyInstance)
Note: See TracChangeset for help on using the changeset viewer.