jcpetu Posted January 3, 2015 Share Posted January 3, 2015 Hi people, and happy new year for all of you, anyone have a clue on adding a title to a Context menu in order to differentitate it from another identical context menu in the same program and/or changing the background color? I copy below a help script I was just using for testing. As GUICtrlSetColor & GUICtrlSetBkColor doesn't do the magic I attempted to use GUICtrlCreateLabel but it doesn't paint the context menu area but the maingui one. Thanks in advance for any help and regards. expandcollapse popup#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> Local $hGui = GUICreate("My GUI", 170, 40) Local $idOptionsBtn = GUICtrlCreateButton("&Options", 10, 10, 70, 20, $BS_FLAT) ; At first create a dummy control for the options and a contextmenu for it $idOptionsDummy = GUICtrlCreateDummy() $idOptionsContext = GUICtrlCreateContextMenu($idOptionsDummy) GUICtrlCreateLabel("", 1, 1, 10, 10) GUICtrlSetBkColor(-1, 0x99d9EA) ;cyan GUICtrlSetState(-1, $GUI_DISABLE) GUICtrlCreateMenuItem("Common", $idOptionsContext) GUICtrlCreateMenuItem("File", $idOptionsContext) GUICtrlCreateMenuItem("", $idOptionsContext) Local $idOptionsExit = GUICtrlCreateMenuItem("Exit", $idOptionsContext) Local $idHelpBtn = GUICtrlCreateButton("&Help", 90, 10, 70, 20, $BS_FLAT) ; Create a dummy control and a contextmenu for the help too Local $idHelpDummy = GUICtrlCreateDummy() Local $idHelpContext = GUICtrlCreateContextMenu($idHelpDummy) GUICtrlCreateMenuItem("Website", $idHelpContext) GUICtrlCreateMenuItem("", $idHelpContext) Local $idHelpAbout = GUICtrlCreateMenuItem("About...", $idHelpContext) GUISetState(@SW_SHOW) Local $idMsg ; Loop until the user exits. While 1 $idMsg = GUIGetMsg() Switch $idMsg Case $idOptionsExit, $GUI_EVENT_CLOSE ExitLoop Case $idOptionsBtn ShowMenu($hGui, $idMsg, $idOptionsContext) Case $idHelpBtn ShowMenu($hGui, $idMsg, $idHelpContext) Case $idHelpAbout MsgBox($MB_SYSTEMMODAL, "About...", "GUICtrlGetHandle-Sample") EndSwitch WEnd GUIDelete() ; Show a menu in a given GUI window which belongs to a given GUI ctrl Func ShowMenu($hWnd, $idCtrl, $idContext) Local $aPos, $x, $y Local $hMenu = GUICtrlGetHandle($idContext) $aPos = ControlGetPos($hWnd, "", $idCtrl) $x = $aPos[0] $y = $aPos[1] + $aPos[3] ClientToScreen($hWnd, $x, $y) TrackPopupMenu($hWnd, $hMenu, $x, $y) EndFunc ;==>ShowMenu ; Convert the client (GUI) coordinates to screen (desktop) coordinates Func ClientToScreen($hWnd, ByRef $x, ByRef $y) Local $tPoint = DllStructCreate("int;int") DllStructSetData($tPoint, 1, $x) DllStructSetData($tPoint, 2, $y) DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($tPoint)) $x = DllStructGetData($tPoint, 1) $y = DllStructGetData($tPoint, 2) ; release Struct not really needed as it is a local $tPoint = 0 EndFunc ;==>ClientToScreen ; Show at the given coordinates (x, y) the popup menu (hMenu) which belongs to a given GUI window (hWnd) Func TrackPopupMenu($hWnd, $hMenu, $x, $y) DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $x, "int", $y, "hwnd", $hWnd, "ptr", 0) EndFunc ;==>TrackPopupMenu Link to comment Share on other sites More sharing options...
johnmcloud Posted January 3, 2015 Share Posted January 3, 2015 (edited) From the help, a little edited: expandcollapse popup#include <GUIConstantsEx.au3> GUICreate("My GUI", 300, 200) Local $idFileMenu = GUICtrlCreateContextMenu() GUICtrlCreateMenuItem("&Open", $idFileMenu) GUICtrlCreateMenuItem("&Save", $idFileMenu) GUICtrlCreateMenuItem("", $idFileMenu) Local $idOptionsMenu = GUICtrlCreateMenu("O&ptions", $idFileMenu) GUICtrlCreateMenuItem("View", $idOptionsMenu) GUICtrlCreateMenuItem("", $idOptionsMenu) GUICtrlCreateMenuItem("Tools", $idOptionsMenu) GUICtrlCreateMenuItem("", $idFileMenu) Local $idExitItem = GUICtrlCreateMenuItem("&Exit", $idFileMenu) Local $idEndBtn = GUICtrlCreateButton("End", 110, 140, 70, 20) SetMenuColor($idFileMenu, 0xEEBB99) ; BGR color value SetMenuColor($idOptionsMenu, 0x66BB99); BGR color value GUISetState(@SW_SHOW) While 1 $idMsg = GUIGetMsg() Switch $idMsg Case $idExitItem, $idEndBtn, $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd ; Apply the color to the menu Func SetMenuColor($nMenuID, $nColor) Local Const $MIM_APPLYTOSUBMENUS = 0x80000000 Local Const $MIM_BACKGROUND = 0x00000002 Local $hMenu = GUICtrlGetHandle($nMenuID) Local $hBrush = DllCall("gdi32.dll", "hwnd", "CreateSolidBrush", "int", $nColor) $hBrush = $hBrush[0] Local $tMenuInfo = DllStructCreate("dword;dword;dword;uint;dword;dword;ptr") DllStructSetData($tMenuInfo, 1, DllStructGetSize($tMenuInfo)) DllStructSetData($tMenuInfo, 2, BitOR($MIM_APPLYTOSUBMENUS, $MIM_BACKGROUND)) DllStructSetData($tMenuInfo, 5, $hBrush) DllCall("user32.dll", "int", "SetMenuInfo", "hwnd", $hMenu, "ptr", DllStructGetPtr($tMenuInfo)) $tMenuInfo = 0 ; release Struct not really needed as it is a local EndFunc ;==>SetMenuColor Or use >GUI/Tray Menu with icons and colors Edited January 3, 2015 by johnmcloud Link to comment Share on other sites More sharing options...
jcpetu Posted January 3, 2015 Author Share Posted January 3, 2015 Thanks a lot johnmcloud. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now