Funktionreferenz


GUICtrlCreateContextMenu

Beschreibung anzeigen in

Erstellt ein Kontextmenü für ein Control oder das ganze GUI-Fenster.

GUICtrlCreateContextMenu ( [controlID] )

Parameter

ControlID [optional] Die Control-ID des Items wie von GUICtrlCreate...() Funktion zurückgegeben.

Rückgabewert

Erfolg: Die Identifikationsnummer (Control-ID) des neuen Controls.
Fehler: 0.

Bemerkungen

Nach dem Erstellen des Hauptitems für das Kontextmenü mit dieser Funktion können die Menüeinträge einzeln mit der Funktion GUICtrlCreateMenuItem() erzeugt werden. Unter-Menüs können mit GUICtrlCreateMenu() erzeugt werden.

Wenn in dieser Funktion keine Parameter angegeben werden oder -1 als Parameter verwendet wird, wird das Kontextmenü mit dem gesamten GUI-Fenster verknüpft anstatt mit einem einzelnen Control.

Pro Control kann nur ein Kontextmenü erstellt werden. Wenn ein neues Kontextmenü erstellt werden soll, muss zuerst das schon existierende Kontextmenü gelöscht werden.

Hinweis: Es können keine Kontextmenüs für Controls angelegt werden, die schon ein System-Kontextmenü haben, wie z.B. Textfelder (edit oder input controls).

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

Verwandte Funktionen

GUICtrlCreateMenu, GUICtrlCreateMenuItem, GUICtrlDelete, GUICtrlGetHandle, GUICtrlSetState

Beispiel

Beispiel 1

; Rechtsklick im Anwendungsbereich, um Kontextmenü anzuzeigen.
; Rechtsklick auf den "OK" Button, um ein Control-spezifisches Kontextmenü anzuzeigen.

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    GUICreate("Mein GUI Kontextmenü", 300, 200)

    Local $idContextmenu = GUICtrlCreateContextMenu()

    Local $idNewsubmenu = GUICtrlCreateMenu("Neu", $idContextmenu)
    Local $idNewsubmenuText = GUICtrlCreateMenuItem("Text", $idNewsubmenu)

    Local $idButton = GUICtrlCreateButton("OK", 100, 100, 70, 20)
    Local $idButtoncontext = GUICtrlCreateContextMenu($idButton)
    Local $idMenuAbout = GUICtrlCreateMenuItem("Über Button", $idButtoncontext)

    Local $idMenuOpen = GUICtrlCreateMenuItem("Öffnen", $idContextmenu)
    Local $idMenuSave = GUICtrlCreateMenuItem("Speichern", $idContextmenu)
    GUICtrlCreateMenuItem("", $idContextmenu) ; Trennstrich

    Local $idMenuInfo = GUICtrlCreateMenuItem("Info", $idContextmenu)

    GUISetState(@SW_SHOW)

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $idButton
                MsgBox($MB_SYSTEMMODAL, "Button geklickt", 'OK')
            Case $idMenuAbout
                MsgBox($MB_SYSTEMMODAL, "Menü ausgewählt", 'Über')
            Case $idMenuOpen
                MsgBox($MB_SYSTEMMODAL, "Menü ausgewählt", 'Öffnen')
            Case $idMenuSave
                MsgBox($MB_SYSTEMMODAL, "Menü ausgewählt", 'Speichern')
            Case $idMenuInfo
                MsgBox($MB_SYSTEMMODAL, "Menü ausgewählt", 'Info')
            Case $idNewsubmenuText
                MsgBox($MB_SYSTEMMODAL, "Untermenü ausgewählt", 'Text')
        EndSwitch
    WEnd
    GUIDelete()
EndFunc   ;==>Example

Beispiel 2

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    Local $hGui = GUICreate("Meine GUI", 170, 40)

    Local $idOptionsBtn = GUICtrlCreateButton("&Optionen", 10, 10, 70, 20, $BS_FLAT)

    ; Zuerst ein Dummy-Control für die Optionen und ein Kontextmenü erzeugen
    Local $idOptionsDummy = GUICtrlCreateDummy()
    Local $idOptionsContext = GUICtrlCreateContextMenu($idOptionsDummy)
    GUICtrlCreateMenuItem("Allgemein", $idOptionsContext)
    GUICtrlCreateMenuItem("Datei", $idOptionsContext)
    GUICtrlCreateMenuItem("", $idOptionsContext)
    Local $idOptionsExit = GUICtrlCreateMenuItem("Beenden", $idOptionsContext)

    Local $idHelpBtn = GUICtrlCreateButton("&Hilfe", 90, 10, 70, 20, $BS_FLAT)

    ; Dann ebenso ein Dummy-Control und ein Kontextmenü für die Hilfe erzeugen
    Local $idHelpDummy = GUICtrlCreateDummy()
    Local $idHelpContext = GUICtrlCreateContextMenu($idHelpDummy)
    GUICtrlCreateMenuItem("Webseite", $idHelpContext)
    GUICtrlCreateMenuItem("", $idHelpContext)
    Local $idHelpAbout = GUICtrlCreateMenuItem("Über...", $idHelpContext)

    GUISetState(@SW_SHOW)

    Local $idMsg
    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst.
    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, "Über...", "GUICtrlGetHandle-Beispiel")
        EndSwitch
    WEnd
    GUIDelete()
EndFunc   ;==>Example

; Zeigt ein Menü zugehörig einem bestimmten GUI-Control in einem bestimmten GUI-Fenster
Func ShowMenu($hWnd, $CtrlID, $nContextID)
    Local $aPos, $x, $y
    Local $hMenu = GUICtrlGetHandle($nContextID)

    $aPos = ControlGetPos($hWnd, "", $CtrlID)

    $x = $aPos[0]
    $y = $aPos[1] + $aPos[3]

    ClientToScreen($hWnd, $x, $y)
    TrackPopupMenu($hWnd, $hMenu, $x, $y)
EndFunc   ;==>ShowMenu

; Passt die Clientkoordinaten (GUI) den Bildschirmkoordinaten (Desktop) an
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)
    ; Freigabe der Struktur nicht unbedingt nötig, solange sie lokal ist
    $tPoint = 0
EndFunc   ;==>ClientToScreen

; Zeigt an den angegebenen Koordinaten (x, y) das Popupmenü (hMenu) zugehörig einem bestimmten GUI-Fenster (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