Функция _GUICtrlMenu_InsertMenuItemEx

         Описание функции


_GUICtrlMenu_InsertMenuItemEx

Вставляет новый пункт в указанную позицию в меню

#include <GuiMenu.au3>
_GUICtrlMenu_InsertMenuItemEx($hMenu, $iIndex, ByRef $tMenu [, $fByPos = True])

Параметры

$hMenu Дескриптор меню
$iIndex Позиция пункта меню, перед которым вставляется новый пункт
$tMenu Структура $tagMENUITEMINFO
$fByPos [необязательный] Флаг для идентификации меню:
    True - $iIndex является позицией пункта, отсчёт от 0
    False - $iIndex является идентификатором пункта

Возвращаемое значение

Успех:Возвращает True
Ошибка:Возвращает False

См. также

_GUICtrlMenu_InsertMenuItem, $tagMENUITEMINFO

См. также

Искать InsertMenuItem в библиотеке MSDN

Пример

#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