Code Bye

重写默认Expand Popup Menu

当点击expand button时,默认菜单只允许用户使用 “Show More Buttons” 和”Show Fewer Buttons.” 并且没有本地化翻译. 你可以创建自定义popup menu,在ExpandButtonDown事件中重写默认. 这样你不仅可以添加自己的 popup menu, 还可以本地化翻译文字. 下面展示如何创建类似Office 2003的expand menu.

 

To start, you must set CancelMenu to True in the ExpandButtonDown event:

‘The ExpandButtonDown event is fired when the ShortcutBar’s

‘expand button is clicked.

Private Sub wndShortcutBar_ExpandButtonDown(CancelMenu As Boolean)

    ‘Cancels the default menu that is displayed when the expand button is pressed.

    ‘The default button only displays the “Show More Buttons” and “Show Fewer

    ‘Buttons” commands.

    CancelMenu = True

    Dim Popup As CommandBar

    Dim Control As CommandBarControl

    Dim SubControl As CommandBarControl

    Dim i As Long

    Dim Item As ShortcutBarItem

In this sample we will use the CommandBars to create our expand menu. So we will need to add any icons to the CommandBars Icons collection.

    ‘Add the icons from the ShortcutBar to the Commandbars to

    ‘be used in the commandbar popup that will be created

    CommandBars.Icons.AddIcons wndShortcutBar.Icons

Then create a Popup Commandbar that will be used as the ShortcutBar’s new expand button popup:

    ‘Creates a popup command bar we will use as the

    ‘ShortcutBar’s expand button popup menu

    Set Popup = CommandBars.Add(“Popup”, xtpBarPopup)

Now add some buttons to the popup menu. The picture below shows where these buttons will be displayed:

    ‘Adds buttons to the popup command bar, we will add a total

    ‘of 9 commands

    With Popup

        ‘Adds the “Show More Buttons” button

        Set Control = frmMain.AddButton(.Controls, xtpControlButton, _

                                        SHORTCUT_SHOW_MORE, “Show &More Buttons”)

        ‘Enable this button if all buttons are not expanded

        Control.Enabled = (wndShortcutBar.ExpandedLinesCount <> 9)

        ‘Adds the “Show Fewer Buttons” button

        Set Control = frmMain.AddButton(.Controls, xtpControlButton, _

                                      SHORTCUT_SHOW_FEWER, “Show &Fewer Buttons”)

        ‘Enable this button if there are 1 or more buttons expanded

        Control.Enabled = (wndShortcutBar.ExpandedLinesCount <> 1)

        ‘Adds the “Navigation Pane Options…” button as in Outlook 2003,

        ‘this will do nothing in our sample

        AddButton .Controls, xtpControlButton, SHORTCUT_NAVIGATE_PANE_OPTIONS, _

                                                    “Na&vigation Pane Options…”

 

Now we will add the popup button that contains a button for each of the ShortcutBar items. These buttons will be used to hide\show the corresponding item in the ShortcutBar. The picture below shows where these items will be displayed:

        ‘Adds the “Add or Remove Buttons” popup menu.  This popup will

        ‘contain a button that corresponds to each item that is in the

        ‘ShortcutBar.  The buttons will allow you to hide\show items

        ‘in the ShortcutBar

        Set Control = AddButton(.Controls, xtpControlButtonPopup, _

                           SHORTCUT_ADD_REMOVE_BUTTONS, “&Add or Remove Buttons”)

        ‘Adds a button for each shortcutbar item to the

        ‘”Add or Remove Buttons” popup menu

        For Each Item In wndShortcutBar

            If Not Item.Id = -1 Then

                With Control.CommandBar

                    Set SubControl = AddButton(.Controls, xtpControlButton, _

                                                           Item.Id, Item.Caption)

                    SubControl.IconId = Item.Id

                    ‘set the button as “checked” if the Item is

                    ‘currently visible in the Shortcutbar

                    SubControl.Checked = Item.Visible

                End With

            End If

        Next

 

The last part of the popup will contain a quick link to all of the ShortcutBar items that are currently hidden. The picture below shoes where these items are displayed:

        Dim BeginGroup As Boolean

        BeginGroup = True

        ‘Adds all hidden shortcut bar buttons to the popup menu

        ‘This will give you access to the buttons not currently

        ‘displayed in the ShortcutBar

        For Each Item In wndShortcutBar

            ‘If shortcut bar item is hidden, then add it to the popup menu

            If (Item.Hidden) Then

                AddButton .Controls, xtpControlButton, Item.Id, Item.Caption, _

                                                                       BeginGroup

                BeginGroup = False

            End If

        Next

    End With

 

Next you will add the message handleing from the popup menu:

    End With

    ‘stores the ID of the selected control from the expand button popup menu.

    Dim nCommand As Long

    ‘Displays the expand button popup.  Control will not pass

    ‘back to the code until the popup menu is closed.

    ‘Passing TPM_RETURNCMD into ShowPopup will cause the ID of the control to

    ‘be returned when a control in the popup is clicked. When using the

    ‘TPM_RETURNCMD parameter, the CommandBars_Execute event does not fire

    ‘because the ID of the control is returned instead.

    nCommand = Popup.ShowPopup(TPM_RETURNCMD)

    ‘Popup is closed and the user did not select anything, they might have

    ‘click on something other than the popup menu

    If (nCommand = 0) Then Exit Sub

    ‘A control was selected from the popup menu. Determines which control

    ‘was selected.

    Select Case (nCommand)

        Case SHORTCUT_INBOX To SHORTCUT_JOURNAL

            ‘Hides or displays the ShortcutBar item that was clicked

            wndShortcutBar.FindItem(nCommand).Visible = _

                                   Not wndShortcutBar.FindItem(nCommand).Visible

        Case SHORTCUT_SHOW_MORE:

            ‘Expands the Shortcut list by 1

            wndShortcutBar.ExpandedLinesCount = _

                                           wndShortcutBar.ExpandedLinesCount + 1

        Case SHORTCUT_SHOW_FEWER:

            ‘Collapses the Shortcut list by 1

            wndShortcutBar.ExpandedLinesCount = _

                                           wndShortcutBar.ExpandedLinesCount – 1

        Case SHORTCUT_NAVIGATE_PANE_OPTIONS:

            Debug.Print “Navigate Pane Options Clicked”

    End Select

End Sub

Below is the complete code for the ExpandButtonDown event:

‘The ExpandButtonDown event is fired when the ShortcutBar’s

‘expand button is clicked.

Private Sub wndShortcutBar_ExpandButtonDown(CancelMenu As Boolean)

    ‘Cancels the default menu that is displayed when the expand button is pressed.

    ‘The default button only displays the “Show More Buttons” and “Show Fewer

    ‘Buttons” commands.

    CancelMenu = True

    Dim Popup As CommandBar

    Dim Control As CommandBarControl

    Dim SubControl As CommandBarControl

    Dim i As Long

    Dim Item As ShortcutBarItem

    ‘Add the icons from the ShortcutBar to the Commandbars to

    ‘be used in the commandbar popup that will be created

    CommandBars.Icons.AddIcons wndShortcutBar.Icons

    ‘Creates a popup command bar we will use as the

    ‘ShortcutBar’s expand button popup menu

    Set Popup = CommandBars.Add(“Popup”, xtpBarPopup)

    ‘Adds buttons to the popup command bar, we will add a total

    ‘of 9 commands

    With Popup

        ‘Adds the “Show More Buttons” button

        Set Control = frmMain.AddButton(.Controls, xtpControlButton, _

                                        SHORTCUT_SHOW_MORE, “Show &More Buttons”)

        ‘Enable this button if all buttons are not expanded

        Control.Enabled = (wndShortcutBar.ExpandedLinesCount <> 9)

        ‘Adds the “Show Fewer Buttons” button

        Set Control = frmMain.AddButton(.Controls, xtpControlButton, _

                                      SHORTCUT_SHOW_FEWER, “Show &Fewer Buttons”)

        ‘Enable this button if there are 1 or more buttons expanded

        Control.Enabled = (wndShortcutBar.ExpandedLinesCount <> 1)

        ‘Adds the “Navigation Pane Options…” button as in Outlook 2003,

        ‘this will do nothing in our sample

        AddButton .Controls, xtpControlButton, SHORTCUT_NAVIGATE_PANE_OPTIONS, _

                                                    “Na&vigation Pane Options…”

        ‘Adds the “Add or Remove Buttons” popup menu.  This popup will

        ‘contain a button that corresponds to each item that is in the

        ‘ShortcutBar.  The buttons will allow you to hide\show items

        ‘in the ShortcutBar

        Set Control = AddButton(.Controls, xtpControlButtonPopup, _

                           SHORTCUT_ADD_REMOVE_BUTTONS, “&Add or Remove Buttons”)

        ‘Adds a button for each shortcutbar item to the

        ‘”Add or Remove Buttons” popup menu

        For Each Item In wndShortcutBar

            If Not Item.Id = -1 Then

                With Control.CommandBar

                    Set SubControl = AddButton(.Controls, xtpControlButton, _

                                                           Item.Id, Item.Caption)

                    SubControl.IconId = Item.Id

                    ‘set the button as “checked” if the Item is

                    ‘currently visible in the Shortcutbar

                    SubControl.Checked = Item.Visible

                End With

            End If

        Next

        Dim BeginGroup As Boolean

        BeginGroup = True

        ‘Adds all hidden shortcut bar buttons to the popup menu

        ‘This will give you access to the buttons not currently

        ‘displayed in the ShortcutBar

        For Each Item In wndShortcutBar

            ‘If shortcut bar item is hidden, then add it to the popup menu

            If (Item.Hidden) Then

                AddButton .Controls, xtpControlButton, Item.Id, Item.Caption, _

                                                                       BeginGroup

                BeginGroup = False

            End If

        Next

    End With

    ‘stores the ID of the selected control from the expand button popup menu.

    Dim nCommand As Long

    ‘Displays the expand button popup.  Control will not pass

    ‘back to the code until the popup menu is closed.

    ‘Passing TPM_RETURNCMD into ShowPopup will cause the ID of the control to

    ‘be returned when a control in the popup is clicked. When using the

    ‘TPM_RETURNCMD parameter, the CommandBars_Execute event does not fire

    ‘because the ID of the control is returned instead.

    nCommand = Popup.ShowPopup(TPM_RETURNCMD)

    ‘Popup is closed and the user did not select anything, they might have

    ‘click on something other than the popup menu

    If (nCommand = 0) Then Exit Sub

    ‘A control was selected from the popup menu. Determines which control

    ‘was selected.

    Select Case (nCommand)

        Case SHORTCUT_INBOX To SHORTCUT_JOURNAL

            ‘Hides or displays the ShortcutBar item that was clicked

            wndShortcutBar.FindItem(nCommand).Visible = _

                                   Not wndShortcutBar.FindItem(nCommand).Visible

        Case SHORTCUT_SHOW_MORE:

            ‘Expands the Shortcut list by 1

            wndShortcutBar.ExpandedLinesCount = _

                                           wndShortcutBar.ExpandedLinesCount + 1

        Case SHORTCUT_SHOW_FEWER:

            ‘Collapses the Shortcut list by 1

            wndShortcutBar.ExpandedLinesCount = _

                                           wndShortcutBar.ExpandedLinesCount – 1

        Case SHORTCUT_NAVIGATE_PANE_OPTIONS:

            Debug.Print “Navigate Pane Options Clicked”

    End Select

End Sub

Author: Mike Palmatier
Posted: April 28, 2008
Environment: Visual Basic 6.0
Downloads:
 CustomExpandButton.zip – Source Files with Demo Project [39 KB]

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明重写默认Expand Popup Menu