wqweto / ModernSubclassingThunk

The Modern Subclassing Thunk (MST) for VB6
MIT License
18 stars 7 forks source link
ebisresetting ebmode hooking subclassing thunk timers vb6

The Modern Subclassing Thunk (MST)

IDE-safe subclassing, hooking and fire-once timers that have no problems with End button/statement in VBIDE.

Description

These thunks allow implementing IDE-safe window subclassing, windows hooks and fire-once timers for self-contained user-controls, forms and classes.

Usage

Start by including src\mdModernSubclassing.bas in your project.

Subclassing guidelines

Add private m_pSubclass As IUnknown member variable to your form/class.

Add private pvAddressOfSubclassProc helper property to your form/class.

Private Property Get pvAddressOfSubclassProc() As frmTestSubclass
    Set pvAddressOfSubclassProc = InitAddressOfMethod(Me, 5)
End Property

Notice return type frmTestSubclass is the name of your form/class and this is important to match.

Add public SubclassProc function with proper SUBCLASSPROC input parameters and return type.

Public Function SubclassProc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long, Handled As Boolean) As Long
    Select Case wMsg
    Case WM_WINDOWPOSCHANGED
        ...
    End Select
End Function

Start subclassing with an InitSubclassingThunk call in Form_Load or any other routine.

    Set m_pSubclass = InitSubclassingThunk(hWnd, Me, pvAddressOfSubclassProc.SubclassProc(0, 0, 0, 0, 0))

Can explicitly unsubclass by clearing the m_pSubclass variable in Form_Unload but no harm to leave it auto-clear on shutdown.

    Set m_pSubclass = Nothing