UDF > GUI > GuiMenu >


_GUICtrlMenu_MenuItemFromPoint

D�termine quel �l�ment de menu est � l'emplacement sp�cifi�

#include <GuiMenu.au3>
_GUICtrlMenu_MenuItemFromPoint ( $hWnd, $hMenu [, $iX = -1 [, $iY = -1]] )

Param�tres

$hWnd Handle de la fen�tre contenant le menu. Si cette valeur est 0 et $hMenu repr�sente un menu d�roulant, la fonction trouvera la fen�tre du menu.
$hMenu Handle du menu contenant les �l�ments qu'il faut tester
$iX [optionnel] Position X � tester. Si -1, la position X courante de la souris sera utilis�e.
$iY [optionnel] Position Y � tester. Si -1, la position Y courante de la souris sera utilis�e.

Valeur de retour

Succ�s: Retourne la position de base 0 de l'�l�ment de menu � l'emplacement sp�cifi�.
�chec: Retourne -1.

Remarque

Si $hMenu sp�cifie une barre de menu, les coordonn�es sont les coordonn�es de la fen�tre. Sinon, elles sont les coordonn�es de la zone cliente.

Voir aussi

Consultez MenuItemFromPoint dans la librairie MSDN.

Exemple

#include <GuiMenu.au3>

Example()

Func Example()
    Local $hWnd, $hMain, $hFile, $tRect, $tPoint, $iX, $iY, $iIndex

    ; Ouvre le Bloc-Notes
    Run("notepad.exe")
    WinWaitActive("[CLASS:Notepad]")
    $hWnd = WinGetHandle("[CLASS:Notepad]")
    $hMain = _GUICtrlMenu_GetMenu($hWnd)
    $hFile = _GUICtrlMenu_GetItemSubMenu($hMain, 0)

    ; Ouvre le menu File
    Send("!f")
    Sleep(1000)

    ; D�place la souris sur l'�l�ment de menu Open
    $tRect = _GUICtrlMenu_GetItemRectEx($hWnd, $hFile, 1)
    $tPoint = _Lib_PointFromRect($tRect, True)
    _Lib_GetXYFromPoint($tPoint, $iX, $iY)
    MouseMove($iX, $iY, 1)
    Sleep(1000)

    ; Obtient l'�l�ment de menu � partir de la position actuelle de la souris
    $iIndex = _GUICtrlMenu_MenuItemFromPoint($hWnd, $hFile)
    Send("{ESC 2}")
    Writeln("�l�ment de menu sous le curseur �tait: " & $iIndex)
EndFunc   ;==>Example

; �crit une ligne de texte dans le Bloc-Notes
Func Writeln($sText)
    ControlSend("[CLASS:Notepad]", "", "Edit1", $sText & @CRLF)
EndFunc   ;==>Writeln

Func _Lib_PointFromRect(ByRef $tRect, $bCenter = True)
    Local $iX1, $iY1, $iX2, $iY2, $tPoint

    $iX1 = DllStructGetData($tRect, "Left")
    $iY1 = DllStructGetData($tRect, "Top")
    $iX2 = DllStructGetData($tRect, "Right")
    $iY2 = DllStructGetData($tRect, "Bottom")
    If $bCenter Then
        $iX1 = $iX1 + (($iX2 - $iX1) / 2)
        $iY1 = $iY1 + (($iY2 - $iY1) / 2)
    EndIf
    $tPoint = DllStructCreate($tagPOINT)
    DllStructSetData($tPoint, "X", $iX1)
    DllStructSetData($tPoint, "Y", $iY1)
    Return $tPoint
EndFunc   ;==>_Lib_PointFromRect

Func _Lib_GetXYFromPoint(ByRef $tPoint, ByRef $iX, ByRef $iY)
    $iX = DllStructGetData($tPoint, "X")
    $iY = DllStructGetData($tPoint, "Y")
EndFunc   ;==>_Lib_GetXYFromPoint