Имеется VB6 SP6
Для наглядного отображения моей проблемы создан ActiveX Control-проект, состоящий:
UserControl=UserControl1.ctl
Module=SubClasser; SubClasser.bas
Class=ISubclass; ISubclass.cls
Class=SubClassItem; SubClassItem.cls
Модули и классы сабклассера - из кирпичного завода...
Код UserControl'а:
- Код: Выделить всё
Option Explicit
Implements ISubclass
Private Const WM_MOUSEHOVER As Long = &H2A1
Private Const WM_MOUSELEAVE As Long = &H2A3
Private Const WM_MOUSEMOVE As Long = &H200
Private Const TME_HOVER As Long = 1
Private Const TME_LEAVE As Long = 2
Private Type tagTRACKMOUSEEVENT
cbSize As Long
dwFlags As Long
hwndTrack As Long
dwHoverTime As Long
End Type
Private Declare Function TrackMouseEvent Lib "user32.dll" ( _
ByRef lpEventTrack As tagTRACKMOUSEEVENT) As Long
Public Event MouseHover()
Public Event MouseLeave()
Private m_blnHot As Boolean
Private Function ISubclass_Callback(ByVal hWnd As Long, uMsg As Long, wParam As Long, lParam As Long, ByVal PrevProc As Long) As Long
Dim typTME As tagTRACKMOUSEEVENT
Select Case uMsg
Case WM_MOUSEHOVER
m_blnHot = True
RaiseEvent MouseHover
Case WM_MOUSELEAVE
m_blnHot = False
RaiseEvent MouseLeave
Case WM_MOUSEMOVE
If Not m_blnHot Then
With typTME
.cbSize = LenB(typTME)
.hwndTrack = hWnd
.dwFlags = TME_HOVER Or TME_LEAVE
.dwHoverTime = 1
End With
TrackMouseEvent typTME
End If
Case Else
ISubclass_Callback = SubClasser.CallWindowProc(PrevProc, hWnd, uMsg, wParam, lParam)
End Select
End Function
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
SubClasser.AddSubclassHook hWnd, Me, DoNotTransfer
End Sub
Private Sub UserControl_Terminate()
SubClasser.RemoveSubclassHook hWnd
End Sub
Благополучно создается project1.ocx...
Затем создается проект Standart EXE, на форму которого помещается созданный контрол и надпись Label1
Код формы Form1
- Код: Выделить всё
Option Explicit
Private Sub UserControl11_MouseHover()
Label1 = "MouseHover"
End Sub
Private Sub UserControl11_MouseLeave()
Label1 = "MouseLeave"
End Sub
Проект запускается в IDE, работает... вроде все нормально...
Компилируется vb6projectProject1.exe
Затем экзешник запускается, работает... и тут вроде бы все нормально..
Но как только окно закрывается, вылетает ошибка
AppName: vb6projectproject1.exe AppVer: 0.0.0.0 ModName: kernel32.dll
ModVer: 5.1.2600.2945 Offset: 00012a5b
И не понятно, почему...
Вот надеюсь, что кто-нибудь все-таки поможет