You can achieve this by SubClassing.
Code for a Module
Code:
'*****************************************************************************
'
' DYNAMIC EVENTS
'
' Written by Randy Jheeta, April 2000
' -=Please do not modify/reproduce this code without contacting me first=-
'
' E-mail: [email protected]
'
'*****************************************************************************
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_COMMAND = &H111
Public Const WM_CLOSE = &H10
Public tmpParam As Long
Public g_OldProc As Long
Public Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case Msg&
Case WM_COMMAND:
tmpParam = LoWord(lParam)
Select Case tmpParam
Case frmMain.Check1.hwnd
'Check1 was clicked
Call MsgBox("You clicked Check1")
Case frmMain.Check2.hwnd
'Check2 was clicked
Call MsgBox("You clicked Check2")
End Select
Case WM_CLOSE:
Call SetWindowLong(hwnd&, GWL_WNDPROC, gOldProc&)
End Select
WindowProc = CallWindowProc(g_OldProc&, hwnd&, Msg&, wParam&, lParam&)
End Function
Public Function HiWord(wParam As Long) As Integer
If wParam And &H80000000 Then
HiWord = (wParam \ 65535) - 1
Else
HiWord = wParam \ 65535
End If
End Function
Public Function LoWord(wParam As Long) As Integer
If wParam And &H8000& Then
LoWord = &H8000 Or (wParam And &H7FFF&)
Else
LoWord = wParam And &HFFFF&
End If
End Function
Code for Form
Code:
Private Sub Form_Load()
'Create Check1
Controls.Add "VB.CheckBox", "Check1"
Me!Check1.Move 0, 0
Me!Check1.Caption = "Check1"
Me!Check1.Visible = True
'Create Check2
Controls.Add "VB.CheckBox", "Check2"
Me!Check2.Move 480, 480
Me!Check2.Caption = "Check2"
Me!Check2.Visible = True
g_OldProc& = GetWindowLong(Me.hwnd, GWL_WNDPROC)
Call SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub