#include <GUIConstantsEx.au3>

Example()

Func Example()
	Local $hGui, $FileMenu, $OpenItem, $SaveItem, $OptionsMenu
	Local $ViewItem, $ToolsItem, $ExitItem, $HelpMenu, $AboutItem
	Local $EndBtn, $Msg

	$hGui = GUICreate("Получает дескриптор", 300, 200)

	$FileMenu = GUICtrlCreateMenu("&Файл")
	$OpenItem = GUICtrlCreateMenuItem("&Открыть", $FileMenu)
	$SaveItem = GUICtrlCreateMenuItem("&Сохранить", $FileMenu)
	GUICtrlCreateMenuItem("", $FileMenu)

	$OptionsMenu = GUICtrlCreateMenu("Параметры", $FileMenu)
	$ViewItem = GUICtrlCreateMenuItem("Просмотр", $OptionsMenu)
	GUICtrlCreateMenuItem("", $OptionsMenu)
	$ToolsItem = GUICtrlCreateMenuItem("Инструменты", $OptionsMenu)

	GUICtrlCreateMenuItem("", $FileMenu)
	$ExitItem = GUICtrlCreateMenuItem("&Выход", $FileMenu)

	$HelpMenu = GUICtrlCreateMenu("&?")
	$AboutItem = GUICtrlCreateMenuItem("&О программе", $HelpMenu)

	$EndBtn = GUICtrlCreateButton("Выход", 110, 130, 80, 25)

	SetMenuColor($FileMenu, 0xffcea8) ; значение цвета BGR
	SetMenuColor($OptionsMenu, 0x93ca80); значение цвета BGR
	SetMenuColor($HelpMenu, 0xa8ceff) ; значение цвета BGR

	GUISetState()

	While 1
		$Msg = GUIGetMsg()

		Switch $Msg
			Case $ExitItem, $EndBtn, $GUI_EVENT_CLOSE
				ExitLoop

			Case $AboutItem
				MsgBox(64, "О программе", "Пример цветного меню", 0, $hGui)
		EndSwitch
	WEnd
EndFunc

; Устанавливает цвет в меню
Func SetMenuColor($nMenuID, $nColor)
	Local $hMenu, $hBrush, $stMenuInfo
	Local Const $MIM_APPLYTOSUBMENUS = 0x80000000
	Local Const $MIM_BACKGROUND = 0x00000002

	$hMenu = GUICtrlGetHandle($nMenuID)

	; См. также _WinAPI_CreateSolidBrush
	$hBrush = DllCall("gdi32.dll", "hwnd", "CreateSolidBrush", "int", $nColor)
	$hBrush = $hBrush[0]

	$stMenuInfo = DllStructCreate("dword;dword;dword;uint;dword;dword;ptr")
	DllStructSetData($stMenuInfo, 1, DllStructGetSize($stMenuInfo))
	DllStructSetData($stMenuInfo, 2, BitOR($MIM_APPLYTOSUBMENUS, $MIM_BACKGROUND))
	DllStructSetData($stMenuInfo, 5, $hBrush)

	; См. также _GUICtrlMenu_SetMenuInfo
	DllCall("user32.dll", "int", "SetMenuInfo", "hwnd", $hMenu, "ptr", DllStructGetPtr($stMenuInfo))

	; Освобождает структуру, не обязательно, так как она локальная
	$stMenuInfo = 0
EndFunc