#include <GuiMenu.au3>
#include <GUIConstantsEx.au3>

_Main()

Func _Main()
	Local $hGUI, $hFile, $hEdit, $hHelp, $hMain
	Local Enum $idNew = 1000, $idOpen, $idSave, $idExit, $idCut, $idCopy, $idPaste, $idAbout

	; Создаёт GUI
	$hGUI = GUICreate("Вставляет пункт (структура)", 400, 300)

	; Создаёт меню "Файл"
	$hFile = _GUICtrlMenu_CreateMenu ()
	InsertItem($hFile, 0, 'Новый', $idNew)
	InsertItem($hFile, 1, 'Открыть', $idOpen)
	InsertItem($hFile, 2, 'Сохранить', $idSave)
	InsertItem($hFile, 3, "", 0)
	InsertItem($hFile, 4, 'Выход', $idExit)

	; Создаёт меню "Правка"
	$hEdit = _GUICtrlMenu_CreateMenu ()
	InsertItem($hEdit, 0, 'Вырезать', $idCut)
	InsertItem($hEdit, 1, 'Копировать', $idCopy)
	InsertItem($hEdit, 2, 'Вставить', $idPaste)

	; Создаёт меню "Справка"
	$hHelp = _GUICtrlMenu_CreateMenu ()
	InsertItem($hHelp, 0, 'О программе', $idAbout)

	; Создаёт главное меню
	$hMain = _GUICtrlMenu_CreateMenu ()
	InsertItem($hMain, 0, 'Файл', 0, $hFile)
	InsertItem($hMain, 1, 'Правка', 0, $hEdit)
	InsertItem($hMain, 2, 'Справка', 0, $hHelp)

	; Устанавливает главное меню окна
	_GUICtrlMenu_SetMenu ($hGUI, $hMain)
	GUISetState()

	; Цикл выполняется, пока окно не будет закрыто
	Do
	Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>_Main

; Вставляет пункт меню (трудный способ)
Func InsertItem($hMenu, $iIndex, $sText, $iCmdID = 0, $hSubMenu = 0)
	Local $tMenu, $tText

	$tMenu = DllStructCreate($tagMENUITEMINFO)
	DllStructSetData($tMenu, "Size", DllStructGetSize($tMenu))
	DllStructSetData($tMenu, "Mask", BitOR($MIIM_ID, $MIIM_STRING, $MIIM_SUBMENU))
	DllStructSetData($tMenu, "ID", $iCmdID)
	DllStructSetData($tMenu, "SubMenu", $hSubMenu)
	If $sText = "" Then
		DllStructSetData($tMenu, "Mask", $MIIM_FTYPE)
		DllStructSetData($tMenu, "Type", $MFT_SEPARATOR)
	Else
		DllStructSetData($tMenu, "Mask", BitOR($MIIM_ID, $MIIM_STRING, $MIIM_SUBMENU))
		$tText = DllStructCreate("wchar Text[" & StringLen($sText) + 1 & "]")
		DllStructSetData($tText, "Text", $sText)
		DllStructSetData($tMenu, "TypeData", DllStructGetPtr($tText))
	EndIf
	_GUICtrlMenu_InsertMenuItemEx ($hMenu, $iIndex, $tMenu)
EndFunc   ;==>InsertItem