我找到了"单击Button按钮时,自动弹出下拉菜单ButtonMenu"的方法即API法,的确也能弹出Buttonmenu菜单,只是当单击用这个方法弹出的菜单时,却不能执行ToolbarFrm_ButtonMenuClick的事件,不知是怎么回事,我将代码贴出来,请高手帮我看看错在哪里.其它的问题也还都没有解决掉.还请各位多帮助助我呀.
Option Compare Database
Private Type TBBUTTON
iBitmap As Long
idCommand As Long
fsState As Byte
fsStyle As Byte
bReserved1 As Byte
bReserved2 As Byte
dwData As Long
iString As Long
End Type
Private Type NMHDR
hwndFrom As Long
idfrom As Long
code As Long
End Type
Private Type NMTOOLBAR
hdr As NMHDR
iItem As Long
tbBtn As TBBUTTON
cchText As Long
lpszString As Long
End Type
Private Const TBN_FIRST = -700&
Private Const TBN_DROPDOWN = (TBN_FIRST - 10)
'Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Const WM_USER = &H400
Private Const TB_GETBUTTON As Long = (WM_USER + 23)
Private Const WM_NOTIFY As Long = &H4E&
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Function Showbuttonmenu(ByVal Toolbar1 As Object, ByVal Buttonindex As Long) 'buttonindex从0开始
Dim tButton As TBBUTTON
Dim tNotify As NMTOOLBAR
Dim lResult As Long
Dim mhwnd As Long
Dim lCommandId As Long
Dim str
str = "msvb_lib_toolbar"
mhwnd = FindWindowEx(Toolbar1.hwnd, 0, str, vbNullString)
lResult = SendMessage(mhwnd, TB_GETBUTTON, Buttonindex, tButton)
lCommandId = tButton.idCommand
With tNotify
.hdr.code = TBN_DROPDOWN
.hdr.hwndFrom = mhwnd
.iItem = lCommandId
'Debug.Print "----" & .hdr.code & "----" & .hdr.hwndFrom & "---" & .iItem
End With
lResult = SendMessage(Toolbar1.hwnd, WM_NOTIFY, 0, tNotify)
End Function
Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object)
On Error GoTo Err_ToolbarFrm_ButtonClick:
Showbuttonmenu ToolbarFrm, Button.Index - 1
Exit_ToolbarFrm_ButtonClick:
Exit Sub
Err_ToolbarFrm_ButtonClick:
Resume Exit_ToolbarFrm_ButtonClick
End Sub
Private Sub ToolbarFrm_ButtonMenuClick(ByVal ButtonMenu As Object)
On Error GoTo Err1:
'Beep
Dim aaa As String
aaa = ButtonMenu
MsgBox aaa
Exit_err:
Exit Sub
Err1:
MsgBox Err.Description
Resume Exit_err:
End Sub