Functions > GUI > GUICtrlCreate >


GUICtrlCreateContextMenu

Cr�e un menu contextuel pour un contr�le ou une GUI enti�re.

GUICtrlCreateContextMenu ( [controlID] )

Param�tre

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

Valeur de retour

Succ�s: Retourne l'ID 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