Functions > GUI > GUICtrlCreate >


GUICtrlCreateContextMenu

Crée un menu contextuel -ContextMenu- pour un contrôle ou pour toute la fenêtre GUI.

GUICtrlCreateContextMenu ( [controlID] )

Paramètre

controlID [optionnel] Identifiant de contrôle tel que retourné par GUICtrlCreate...

Valeur de retour

Succès: Retourne l'identifiant (controlID) du nouveau contrôle.
Échec: Retourne 0.

Remarques

Le contrôle ContextMenu représente un menu qui expose les fonctionnalités à l'aide d'un menu contextuel. En règle générale, un utilisateur ouvre un ContextMenu dans une GUI en cliquant avec le bouton droit de la souris.

Après la création du contrôle principal ContextMenu avec cette fonction, chaque élément de menu peut être créé en utilisant GUICtrlCreateMenuItem.
Les sous-menus peuvent être créés avec GUICtrlCreateMenu.

Si vous n'utilisez aucun des paramètres ou -1 dans cette fonction alors le menu contextuel qui est créé est associé à la fenêtre entière GUI plutôt qu'à un contrôle individuel.

Un seul menu contextuel par un contrôle est possible. Si vous souhaitez en créer un nouveau, vous devez d'abord supprimer le menu actuel.

Remarque: Vous ne pouvez pas créer des menus contextuels pour les contrôles qui ont déjà un système de menus contextuels, à savoir des contrôles Edit ou Input.

En relation

GUICtrlCreateMenu, GUICtrlCreateMenuItem, GUICtrlDelete, GUICtrlGetHandle, GUICtrlSetState

Exemples

Exemple 1

; Un clic droit sur la gui fait apparaître le menu contextuel.
; Un clic droit sur le bouton "ok" fait apparaître un menu contextuel spécifique à un contrôle.

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

Example()

Func Example()
    GUICreate("My GUI Context Menu", 300, 200)

    Local $idContextmenu = GUICtrlCreateContextMenu()

    Local $idNewsubmenu = GUICtrlCreateMenu("new", $idContextmenu)
    Local $idNewsubmenuText = GUICtrlCreateMenuItem("text", $idNewsubmenu)

    Local $idButton = GUICtrlCreateButton("OK", 100, 100, 70, 20)
    Local $idButtoncontext = GUICtrlCreateContextMenu($idButton)
    Local $idMenuAbout = GUICtrlCreateMenuItem("About button", $idButtoncontext)

    Local $idMenuOpen = GUICtrlCreateMenuItem("Open", $idContextmenu)
    Local $idMenuSave = GUICtrlCreateMenuItem("Save", $idContextmenu)
    GUICtrlCreateMenuItem("", $idContextmenu) ;séparateur

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

    GUISetState(@SW_SHOW)

    ; Boucle jusqu'à ce que l'utilisateur quitte.
    Local $iMsg = GUIGetMsg()
    While $iMsg <> $GUI_EVENT_CLOSE 
        Switch $iMsg
            Case $idButton
                MsgBox($MB_SYSTEMMODAL, "Button Clicked", 'OK')
            Case $idMenuAbout
                MsgBox($MB_SYSTEMMODAL, "Menu Selected", 'About')
            Case $idMenuOpen
                MsgBox($MB_SYSTEMMODAL, "Menu Selected", 'Open')
            Case $idMenuSave
                MsgBox($MB_SYSTEMMODAL, "Menu Selected", 'Save')
            Case $idMenuInfo
                MsgBox($MB_SYSTEMMODAL, "Menu Selected", 'Info')
            Case $idNewsubmenuText
                MsgBox($MB_SYSTEMMODAL, "SubMenu Selected", 'Text')
        EndSwitch
        $iMsg = GUIGetMsg()
    WEnd
    GUIDelete()
EndFunc   ;==>Example


Exemple 2

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

Example()

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

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

    ; Dans un premier temps, crée un contrôle factice pour les options et un menu contextuel pour lui
    Local $idOptionsDummy = GUICtrlCreateDummy()
    Local $idOptionsContext = GUICtrlCreateContextMenu($idOptionsDummy)
    GUICtrlCreateMenuItem("Common", $idOptionsContext)
    GUICtrlCreateMenuItem("File", $idOptionsContext)
    GUICtrlCreateMenuItem("", $idOptionsContext)
    Local $idOptionsExit = GUICtrlCreateMenuItem("Exit", $idOptionsContext)

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

    ; Crée un contrôle factice et un menu contextuel pour l'aide
    Local $idHelpDummy = GUICtrlCreateDummy()
    Local $idHelpContext = GUICtrlCreateContextMenu($idHelpDummy)
    GUICtrlCreateMenuItem("Website", $idHelpContext)
    GUICtrlCreateMenuItem("", $idHelpContext)
    Local $idHelpAbout = GUICtrlCreateMenuItem("About...", $idHelpContext)

    GUISetState(@SW_SHOW)

    ; Boucle jusqu'à ce que l'utilisateur quitte.
    Local $idMsg = GUIGetMsg()
    While ($idMsg <> $idOptionsExit) And ($idMsg <> $GUI_EVENT_CLOSE)
        Switch $idMsg
            Case $idOptionsBtn
                ShowMenu($hGui, $idMsg, $idOptionsContext)

            Case $idHelpBtn
                ShowMenu($hGui, $idMsg, $idHelpContext)

            Case $idHelpAbout
                MsgBox($MB_SYSTEMMODAL, "About...", "GUICtrlGetHandle-Sample")
        EndSwitch
        $idMsg = GUIGetMsg()
    WEnd

    GUIDelete()
EndFunc   ;==>Example

; Affiche un menu dans une fenêtre GUI donnée qui appartient à un contrôle GUI donné
Func ShowMenu($hWnd, $idCtrl, $idContext)
    Local $aPos, $x, $y
    Local $hMenu = GUICtrlGetHandle($idContext)

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

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

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

; Convertit les coordonnées client GUI en coordonnées écran (bureau)
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)
    ; Libére la structure: pas vraiment nécessaire car elle est locale
    $tPoint = 0
EndFunc   ;==>ClientToScreen

; Affiche les coordonnées données (x, y) dans le menu contextuel (hMenu) qui appartient à une fenêtre de la GUI donnée (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