Dropdown list on toolbar

Started by John Messingham, January 02, 2010, 10:48:24 AM

Previous topic - Next topic

John Messingham

Hi All,

Are there any samples around for how to use a dropdown list on a toolbar?
Many Thanks
John Messingham
http://www.jmds.co.uk

Paul Squires

Something like this....


%IDC_POPUPMENU_OPTION1 = %WM_USER + 100
%IDC_POPUPMENU_OPTION2 = %WM_USER + 101
%IDC_POPUPMENU_OPTION3 = %WM_USER + 102


'--------------------------------------------------------------------------------
Function FORM1_WM_NOTIFY ( _
                         hWndForm     As Dword,     _  ' handle of Form
                         idCtrl       As Dword,     _  ' control ID
                         ByVal pNMHDR As NMHDR Ptr  _  ' pointer to NMHDR structure
                         ) As Long

   Local nmtb    As TBNOTIFY Ptr
   Local pt      As PointApi
   Static hPopup As Dword
     
   nmtb = pNMHDR
   
   If @nmtb.hdr.Code = %TBN_DROPDOWN Then
      ' Create and show the dropdown menu
      If hPopup Then DestroyMenu(hPopup)
      hPopup = CreatePopupMenu()
      AppendMenu hPopup, %MF_STRING, %IDC_POPUPMENU_OPTION1, "Option 1"
      AppendMenu hPopup, %MF_STRING, %IDC_POPUPMENU_OPTION2, "Option 2"
      AppendMenu hPopup, %MF_STRING, %IDC_POPUPMENU_OPTION3, "Option 3"
      GetCursorPos pt
      TrackPopupMenu hPopup, %TPM_LEFTALIGN Or %TPM_LEFTBUTTON, _
                             pt.x, pt.y, 0, hWndForm, ByVal %Null
   End If
           
End Function



'--------------------------------------------------------------------------------
Function FORM1_WM_COMMAND ( _
                          hWndForm     As Dword, _  ' handle of Form
                          hWndControl  As Dword, _  ' handle of Control
                          wNotifyCode  As Long,  _  ' notification code
                          wID          As Long   _  ' item, control, or accelerator identifer
                          ) As Long

   Select Case wID
   
      Case %IDC_POPUPMENU_OPTION1
         MsgBox "option 1 selected"
         
      Case %IDC_POPUPMENU_OPTION2
         MsgBox "option 2 selected"
     
      Case %IDC_POPUPMENU_OPTION3
         MsgBox "option 3 selected"
   
   End Select
End Function

Paul Squires
PlanetSquires Software

Paul Squires

In case your toolbar has more than one dropdown button you can use code liek the following:


%IDC_POPUPMENU_OPTION11 = %WM_USER + 100
%IDC_POPUPMENU_OPTION12 = %WM_USER + 101
%IDC_POPUPMENU_OPTION13 = %WM_USER + 102
%IDC_POPUPMENU_OPTION21 = %WM_USER + 103
%IDC_POPUPMENU_OPTION22 = %WM_USER + 104
%IDC_POPUPMENU_OPTION23 = %WM_USER + 105


'--------------------------------------------------------------------------------
Function FORM1_WM_NOTIFY ( _
                         hWndForm     As Dword,     _  ' handle of Form
                         idCtrl       As Dword,     _  ' control ID
                         ByVal pNMHDR As NMHDR Ptr  _  ' pointer to NMHDR structure
                         ) As Long

   Local nmtb    As TBNOTIFY Ptr
   Local pt      As PointApi
   Static hPopup As Dword
     
   nmtb = pNMHDR
   
   If @nmtb.hdr.Code = %TBN_DROPDOWN Then
      ' Create and show the dropdown menu
      If hPopup Then DestroyMenu(hPopup)
      hPopup = CreatePopupMenu()
     
      Select Case @nmtb.iItem
         Case IDC_FORM1_TOOLBAR1_BUTTON1
            AppendMenu hPopup, %MF_STRING, %IDC_POPUPMENU_OPTION11, "Button 1 Option 1"
            AppendMenu hPopup, %MF_STRING, %IDC_POPUPMENU_OPTION12, "Button 1 Option 2"
            AppendMenu hPopup, %MF_STRING, %IDC_POPUPMENU_OPTION13, "Button 1 Option 3"
         Case IDC_FORM1_TOOLBAR1_BUTTON2
            AppendMenu hPopup, %MF_STRING, %IDC_POPUPMENU_OPTION21, "Button 2 Option 1"
            AppendMenu hPopup, %MF_STRING, %IDC_POPUPMENU_OPTION22, "Button 2 Option 2"
            AppendMenu hPopup, %MF_STRING, %IDC_POPUPMENU_OPTION23, "Button 2 Option 3"
      End Select
      GetCursorPos pt
      TrackPopupMenu hPopup, %TPM_LEFTALIGN Or %TPM_LEFTBUTTON, _
                             pt.x, pt.y, 0, hWndForm, ByVal %Null
   End If
           
End Function



'--------------------------------------------------------------------------------
Function FORM1_WM_COMMAND ( _
                          hWndForm     As Dword, _  ' handle of Form
                          hWndControl  As Dword, _  ' handle of Control
                          wNotifyCode  As Long,  _  ' notification code
                          wID          As Long   _  ' item, control, or accelerator identifer
                          ) As Long

   Select Case wID
   
      Case %IDC_POPUPMENU_OPTION11
         MsgBox "button 1 option 1 selected"
         
      Case %IDC_POPUPMENU_OPTION12
         MsgBox "button 1 option 2 selected"
     
      Case %IDC_POPUPMENU_OPTION13
         MsgBox "button 1 option 3 selected"
   
      Case %IDC_POPUPMENU_OPTION21
         MsgBox "button 2 option 1 selected"
         
      Case %IDC_POPUPMENU_OPTION22
         MsgBox "button 2 option 2 selected"
     
      Case %IDC_POPUPMENU_OPTION23
         MsgBox "button 2 option 3 selected"

   End Select

End Function

Paul Squires
PlanetSquires Software

John Messingham

Many Thanks
John Messingham
http://www.jmds.co.uk