Option ExplicitPrivate Sub Combo1_DropDown()
'该事件是当 ComboBox 控件的列表部分正要被放下时发生;
'如果 ComboBox 控件的 Style 属性设置为 1(简单的 Combo)时此事件不会发生。
    List1.AddItem "Combo1被拉下来了"
End SubPrivate Sub Combo2_DropDown()
    List1.AddItem "Combo2被拉下来了"
End SubPrivate Sub Form_Load()
    prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC) '该窗口的窗口函数的地址
    SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc '在窗口结构中为指定的窗口设置信息'最后一个参数就是你要传递的参数
End SubPrivate Sub Form_Unload(Cancel As Integer)
'在结束你的程序时将控制权交回给原窗口函数
    SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc
End Sub
下面的在标准模块中Option ExplicitPublic Const GWL_WNDPROC = (-4)
Public Const CBN_CLOSEUP = 8
Public Const WM_COMMAND = &H111Declare 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
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic prevWndProc As LongFunction WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'WM_COMMAND=$0111:  当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,188. 一个快捷键被翻译    If Msg = WM_COMMAND And wParam \ 65536 = CBN_CLOSEUP Then '组合框的列表框被关闭        If lParam = Form1.Combo1.hWnd Then
            Form1.List1.AddItem "Combo1被收起来了"
        ElseIf lParam = Form1.Combo2.hWnd Then
            Form1.List1.AddItem "Combo2被收起来了"
        End If
    End If
    
    WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam) '发送消息给一个指定的窗口
End Function
'判断那个组合框收起来
'prevWndProc窗口的地址
'怎么发送消息呢?用窗口的地址,它的句柄,消息,消息的参数