name22

ContextMenu for multiple controls

Jul 31st, 2012
247
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <WindowsConstants.au3>
  2. #include <GUIConstants.au3>
  3. #include <GUIMenu.au3>
  4.  
  5. ; -Author: name22 (www.autoit.de)
  6.  
  7. Global $iButtons = 10 ;Number of Buttons
  8. Global $aButtons[$iButtons + 1][2] = [[$iButtons]]
  9. Global Enum $iTestItem1 = 1000, $iTestItem2, $iTestItem3 ;IDs that will be passed to WM_COMMAND when one of the MenuItems is clicked.
  10. Global $iCurContext ;Variable containing the ArrayIndex of the Button that the current ContextMenu was assigned to.
  11.  
  12. $hWnd_GUI = GUICreate("ContextMenu Example by name22", 400, 100)
  13. For $i = 1 To $aButtons[0][0]
  14.     $aButtons[$i][0] = GUICtrlCreateButton($i, 5 + ($i - 1) * 40, 40, 30, 30)
  15.     $aButtons[$i][1] = GUICtrlGetHandle($aButtons[$i][0])
  16. Next
  17. GUISetState()
  18.  
  19. GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
  20. GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")
  21.  
  22. $hMenu_Context = _GUICtrlMenu_CreatePopup() ;Creation of the actual menu
  23. _GUICtrlMenu_InsertMenuItem($hMenu_Context, 0, "Test-Item 1", $iTestItem1)
  24. _GUICtrlMenu_InsertMenuItem($hMenu_Context, 1, "Test-Item 2", $iTestItem2)
  25. _GUICtrlMenu_InsertMenuItem($hMenu_Context, 2, "Test-Item 3", $iTestItem3)
  26.  
  27. While True
  28.     $nMsg = GUIGetMsg()
  29.     Switch $nMsg
  30.         Case $GUI_EVENT_CLOSE
  31.             Exit
  32.         Case $aButtons[1][0] To $aButtons[$aButtons[0][0]][0]
  33.             MsgBox(64, "Button", "Button Clicked: " & $nMsg - $aButtons[1][0] + 1)
  34.     EndSwitch
  35. WEnd
  36.  
  37. Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
  38.     #forceref $hWnd, $iMsg, $ilParam
  39.     Switch $iwParam
  40.         Case $iTestItem1
  41.             ConsoleWrite("Button: " & $iCurContext & @TAB & "Context: Test-Item 1" & @CRLF)
  42.         Case $iTestItem2
  43.             ConsoleWrite("Button: " & $iCurContext & @TAB & "Context: Test-Item 2" & @CRLF)
  44.         Case $iTestItem3
  45.             ConsoleWrite("Button: " & $iCurContext & @TAB & "Context: Test-Item 3" & @CRLF)
  46.     EndSwitch
  47. EndFunc   ;==>WM_COMMAND
  48.  
  49. Func WM_CONTEXTMENU($hWnd, $iMsg, $iwParam, $ilParam)
  50.     #forceref $hWnd, $iMsg, $ilParam
  51.     For $i = 1 To $aButtons[0][0]
  52.         If $aButtons[$i][1] = $iwParam Then
  53.             $iCurContext = $i
  54.             _GUICtrlMenu_TrackPopupMenu($hMenu_Context, $hWnd_GUI) ;The ContextMenu will be assigned to the MainGUI if one of the buttons is rightclicked. If you assign the menu directly to the button, then WM_COMMAND won't be called when an Item is clicked.
  55.             ExitLoop
  56.         EndIf
  57.     Next
  58.     Return True
  59. EndFunc   ;==>WM_CONTEXTMENU
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×