Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

关于ToolBar的高难度问题

小魏  发表于:2009-01-19 18:44:42  
复制

最近在学习ToolBar控件,但有些地方不的代码写不好,希望各路高手指点一二.先谢谢了.

1.有没有办法给BUTTON按钮的下拉菜单ButtonMenu增加图标?

2.有没有办法给BUTTON按钮边上的小黑色的下拉按钮tbrDropDown设计单击事件?

3.如何让当单击Button按钮时,自动弹出下拉菜单ButtonMenu,即让这个TOOLBAR控件做得像真正的菜单一样的效果.

 

 

Top
小魏 发表于:2009-01-19 18:47:08

图片参考,



小魏 发表于:2009-01-20 21:59:50

我找到了"单击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

 

 



小魏 发表于:2009-01-22 17:31:53
有没有API方面的高手呀,帮我改改上面的代码,我估计着就是哪一句代码有误或者.先谢谢啦.

小魏 发表于:2009-02-01 23:40:04
自己先顶一下啦.

sosopain 发表于:2009-02-03 17:33:59

都用到API了..不如换到VB或者VB.NET吧. 或者ACCESS2007, 都自带这些功能了



总记录:5篇  页次:1/1 9 1 :