Funktionreferenz


_GUICtrlMenu_CreateMenu

Beschreibung anzeigen in

Erstellt ein Menü

#include <GuiMenu.au3>
_GUICtrlMenu_CreateMenu ( [$iStyle = $MNS_CHECKORBMP] )

Parameter

$iStyle [optional] Stile des Menüs. Es kann einer oder mehrere der folgende Werte sein:
    $MNS_AUTODISMISS - das Menü wird automatisch beendet, wenn sich die Maus für 10 Sekunden außerhalb des Menüs befindet
    $MNS_CHECKORBMP - Der gleiche Platz ist für das anzuhakende Feld und das Bitmap reserviert (Standard))
    $MNS_DRAGDROP - Menüitems sind OLE drop Ziele oder drag Quellen
    $MNS_MODELESS - Menü ist formlos
    $MNS_NOCHECK - Es ist kein Platz links von einem Item für das anzuhakende Feld reserviert
    $MNS_NOTIFYBYPOS - Der Menüowner empfängt eine WM_MENUCOMMAND Nachricht anstelle von einer WM_COMMAND Nachricht für die Auswahl

Rückgabewert

Erfolg: das Handle zu dem oben erstellten Menü
Fehler: 0

Bemerkungen

Menüressourcen die mit einem Fenster verknüpft sind, werden automatisch wieder freigegeben. Falls das Menü nicht mit einem Fenster verknüpft ist,
so muss eine Anwendung die Systemressourcen wieder freigeben bevor das Menü geschlossen wird. Um die Ressourcen wieder freizugeben, ist _GUICtrlMenu_DestroyMenu() aufzurufen.
$MNS_NOTIFYBYPOS ist ein Menü-Header-Stil und hat keine Auswirkung, wenn er auf einzelne Untermenüs angewendet wird.

- - - - - - - - Erklärung der Controls - - - - - - - -

Verwandte Funktionen

_GUICtrlMenu_CreatePopup, _GUICtrlMenu_DestroyMenu

Siehe auch

Suche nach CreateMenu in der MSDN Bibliothek.

Beispiel

#include "Extras\HelpFileInternals.au3"

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

Global $g_hStyle, $g_iStyle, $g_idLbl_Time
Global Enum $e_idNew = 1000, $e_idOpen, $e_idSave, $e_idExit, $e_idMNS_CHECKORBMP, $e_idMNS_AUTODISMISS, $e_idMNS_MODELESS, $e_idMNS_NOCHECK, $e_idAbout

Global $g_hGUI, $g_hFile, $g_hHelp, $g_hMain

Example()

Func Example()
    $g_iStyle = $MNS_CHECKORBMP ; Standardmodus

    $g_hGUI = GUICreate("Menu", 500, 300)

    CreateMenus()

    GUICtrlCreateLabel("Nach der Einstellung des Stils auf MNS_MODELESS" & @CRLF & _
            "wird die Uhrzeit kontinuierlich angezeigt, wenn man auf Menü klickt", 20, 2, 390, 60)
    $g_idLbl_Time = GUICtrlCreateLabel("", 400, 2, 160, 40)

    ; Erstellt ein Memo Control
    _MemoCreate(2, 30 + 2, 396, 276 - 30, -1)

    SetStyles()     ; zum Einstellen von Elementen im Stil des Kontrollmenüs

    GUISetState(@SW_SHOW)

    _MemoWrite("beginnend mit Stilen: " & @CRLF & @TAB & ConvStyles())

    ; Registriert die Windows Message ID
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    AdlibRegister("DisplayTime", 1000)

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst.
    Do
        Sleep(10)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    GUIDelete()
EndFunc   ;==>Example

Func CreateMenus()
    GUISetState(@SW_LOCK)

    ; vorherige Menüs entfernen
    _GUICtrlMenu_DestroyMenu($g_hFile)
    _GUICtrlMenu_DestroyMenu($g_hStyle)
    _GUICtrlMenu_DestroyMenu($g_hHelp)
    _GUICtrlMenu_DestroyMenu($g_hMain)

    ; Erstellt den Menüpunkt "Datei"
    $g_hFile = _GUICtrlMenu_CreateMenu()
    _GUICtrlMenu_InsertMenuItem($g_hFile, 0, "&Neu", $e_idNew)
    _GUICtrlMenu_InsertMenuItem($g_hFile, 1, "&Öffnen", $e_idOpen)
    _GUICtrlMenu_InsertMenuItem($g_hFile, 2, "&Speichern", $e_idSave)
    _GUICtrlMenu_InsertMenuItem($g_hFile, 3, "", 0)
    _GUICtrlMenu_InsertMenuItem($g_hFile, 4, "V&erlassen", $e_idExit)

    ; Erstellt den Menüpunkt "Bearbeiten"
    $g_hStyle = _GUICtrlMenu_CreateMenu()
    _GUICtrlMenu_InsertMenuItem($g_hStyle, 0, "MNS_CHECKORBMP", $e_idMNS_CHECKORBMP)
    _GUICtrlMenu_InsertMenuItem($g_hStyle, 1, "MNS_AUTODISMISS", $e_idMNS_AUTODISMISS)
    _GUICtrlMenu_InsertMenuItem($g_hStyle, 2, "MNS_MODELESS", $e_idMNS_MODELESS)
    _GUICtrlMenu_InsertMenuItem($g_hStyle, 3, "MNS_NOCHECK", $e_idMNS_NOCHECK)

    ; Erstellt den Menüpunkt "Hilfe"
    $g_hHelp = _GUICtrlMenu_CreateMenu()
    _GUICtrlMenu_InsertMenuItem($g_hHelp, 0, "&Über", $e_idAbout)

    ; Erstellt das Hauptmenü
    $g_hMain = _GUICtrlMenu_CreateMenu($g_iStyle)     ; ..für MNS_MODELESS wird nur dieses "Hauptmenü" benötigt.
    _GUICtrlMenu_InsertMenuItem($g_hMain, 0, "&Datei", 0, $g_hFile)
    _GUICtrlMenu_InsertMenuItem($g_hMain, 1, "&Bearbeiten", 0, $g_hStyle)
    _GUICtrlMenu_InsertMenuItem($g_hMain, 2, "&Hilfe", 0, $g_hHelp)

    ; Erstellt das Menü Fenster
    _GUICtrlMenu_SetMenu($g_hGUI, $g_hMain)

    GUISetState(@SW_UNLOCK)
EndFunc   ;==>CreateMenus

; Behandlung beim auswählen eines Menü-Eintrags
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $lParam
    Switch _WinAPI_LoWord($wParam)
        Case $e_idNew
            _MemoWrite("Neu")
        Case $e_idOpen
            _MemoWrite("Öffnen")
        Case $e_idSave
            _MemoWrite("Speichern")
        Case $e_idExit
            GUIDelete()
            Exit
        Case $e_idMNS_CHECKORBMP
            UpdateStyles($MNS_CHECKORBMP)
        Case $e_idMNS_AUTODISMISS
            UpdateStyles($MNS_AUTODISMISS)
        Case $e_idMNS_MODELESS
            UpdateStyles($MNS_MODELESS)
        Case $e_idMNS_NOCHECK
            UpdateStyles($MNS_NOCHECK)
        Case $e_idAbout
            _MemoWrite("Über")
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func UpdateStyles($nStyle)
    If BitAND($g_iStyle, $nStyle) Then
        ; den Stil zurücksetzen
        $g_iStyle = BitAND($g_iStyle, BitNOT($nStyle))
    Else
        ; den Stil festlegen
        $g_iStyle = BitOR($g_iStyle, $nStyle)
    EndIf

    ; das Menü mit neuen Stilen neu erstellen, da die Modifikationen von $MNS_MODELESS nicht dynamisch sein können
    CreateMenus()
    _MemoWrite("Neustart mit Stils: " & @CRLF & @TAB & ConvStyles())
    SetStyles()
EndFunc   ;==>UpdateStyles

Func ConvStyles()
    Local $sStyle = ""
    If BitAND($g_iStyle, $MNS_CHECKORBMP) Then $sStyle &= " MNS_CHECKORBMP"
    If BitAND($g_iStyle, $MNS_AUTODISMISS) Then $sStyle &= " MNS_AUTODISMISS"
    If BitAND($g_iStyle, $MNS_MODELESS) Then $sStyle &= " MNS_MODELESS"
    If BitAND($g_iStyle, $MNS_NOCHECK) Then $sStyle &= " MNS_NOCHECK"

    If $g_iStyle = 0 Then
        $g_iStyle = $MNS_CHECKORBMP ; Standardmodus
        $sStyle = " MNS_CHECKORBMP"
    EndIf

    Return $sStyle
EndFunc   ;==>ConvStyles

Func SetStyles()
    If BitAND($g_iStyle, $MNS_CHECKORBMP) Then _GUICtrlMenu_SetItemState($g_hStyle, $e_idMNS_CHECKORBMP, $MFS_CHECKED, True, False)
    If BitAND($g_iStyle, $MNS_AUTODISMISS) Then _GUICtrlMenu_SetItemState($g_hStyle, $e_idMNS_AUTODISMISS, $MFS_CHECKED, True, False)
    If BitAND($g_iStyle, $MNS_MODELESS) Then _GUICtrlMenu_SetItemState($g_hStyle, $e_idMNS_MODELESS, $MFS_CHECKED, True, False)
    If BitAND($g_iStyle, $MNS_NOCHECK) Then _GUICtrlMenu_SetItemState($g_hStyle, $e_idMNS_NOCHECK, $MFS_CHECKED, True, False)

    If $g_iStyle = 0 Then
        $g_iStyle = $MNS_CHECKORBMP ; Standardmodus
        _GUICtrlMenu_SetItemState($g_hStyle, $e_idMNS_CHECKORBMP, $MFS_CHECKED, True, False)
    EndIf
EndFunc   ;==>SetStyles

; Anzeige der neuen Zeit im Label.
Func DisplayTime()
    GUICtrlSetData($g_idLbl_Time, "Zeit =   " & @HOUR & ":" & @MIN & ":" & @SEC)
EndFunc   ;==>DisplayTime