呵呵,要稍微麻烦一些;关键是要自己写一个 WindowProc,截获 CBN_DROPDOWN 和 CBN_CLOSEUP 消息;设置一个开关变量,收到 CBN_DROPDOWN 时 + 1,收到 CBN_CLOSEUP 时 - 1,变量为 0 是证明没有 ComboBox 的下拉框。Public.bas:Option ExplicitPublic 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 SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Const WM_COMMAND = &H111
Public Const CBN_CLOSEUP = 8
Public Const CBN_DROPDOWN = 7
Public Const GWL_WNDPROC = -4Public g_lPrevProc As Long
Public g_nFlip As LongPublic Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_COMMAND Then
' High-order word is the notification message
' Thus we divide wParam by 65536 (&HFFFF)
If wParam \ 65536 = CBN_CLOSEUP Then
g_nFlip = g_nFlip - 1
Beep
ElseIf wParam \ 65536 = CBN_DROPDOWN Then
g_nFlip = g_nFlip + 1
Beep
Else
WindowProc = CallWindowProc(g_lPrevProc, hwnd, uMsg, wParam, lParam)
End If
Else
WindowProc = CallWindowProc(g_lPrevProc, hwnd, uMsg, wParam, lParam)
End If
End FunctionfrmMain.frm:Private Sub Form_Load()
g_lPrevProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Const WM_COMMAND = &H111
Public Const CBN_CLOSEUP = 8
Public Const CBN_DROPDOWN = 7
Public Const GWL_WNDPROC = -4Public g_lPrevProc As Long
Public g_nFlip As LongPublic Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_COMMAND Then
' High-order word is the notification message
' Thus we divide wParam by 65536 (&HFFFF)
If wParam \ 65536 = CBN_CLOSEUP Then
g_nFlip = g_nFlip - 1
Beep
ElseIf wParam \ 65536 = CBN_DROPDOWN Then
g_nFlip = g_nFlip + 1
Beep
Else
WindowProc = CallWindowProc(g_lPrevProc, hwnd, uMsg, wParam, lParam)
End If
Else
WindowProc = CallWindowProc(g_lPrevProc, hwnd, uMsg, wParam, lParam)
End If
End FunctionfrmMain.frm:Private Sub Form_Load()
g_lPrevProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货