Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>
#include <GuiTreeView.au3>
#include <GuiListView.au3>
Opt("GUIOnEventMode", 1)
Dim $Gui
Dim $ItemTree[20]
Dim $ItemList[6]
$Gui = GUICreate("test", 300, 300)
$ItemTree[0] = GUICtrlCreateTreeView(10, 10, 280, 135)
For $i = 1 To 19
$ItemTree[$i] = GUICtrlCreateTreeViewItem(Random(0, 1000, 1), $ItemTree[Random(0, $i - 1, 1)])
Next
$ItemList[0] = GUICtrlCreateListView("Num1|Num2|Num3", 10, 155, 280, 135)
For $i = 1 To 5
$ItemList[$i] = GUICtrlCreateListViewItem(Random(0, 100, 1) & "|" & Random(0, 100, 1) & "|" & Random(0, 100, 1), $ItemList[0])
Next
GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
While (True)
Sleep(10)
WEnd
Func quit()
Exit
EndFunc ;==>quit
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview
$hWndTreeview = $ItemTree[0]
$hWndListView = $ItemList[0]
If Not IsHWnd($ItemTree[0]) Then $hWndTreeview = GUICtrlGetHandle($ItemTree[0])
If Not IsHWnd($ItemList[0]) Then $hWndListView = GUICtrlGetHandle($ItemList[0])
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndTreeview
Local $tPoint, $tTVHEx, $TVhItem, $mX, $mY
$tPoint = _WinAPI_GetMousePos(True, $hWndTreeview)
$mX = DllStructGetData($tPoint, "X")
$mY = DllStructGetData($tPoint, "Y")
$tTVHEx = _GUICtrlTreeView_HitTestEx($hWndTreeview, $mX, $mY)
$TVhItem = DllStructGetData($tTVHEx, "Item")
If $TVhItem = 0x00000000 Then Return 0
Switch $iCode
Case $NM_CLICK
ConsoleWrite("Clic Gauche sur " & _GUICtrlTreeView_GetText($hWndTreeview, $TVhItem) & @LF)
Case $NM_RCLICK
ConsoleWrite("Clic Droit sur " & _GUICtrlTreeView_GetText($hWndTreeview, $TVhItem) & @LF)
EndSwitch
Return 0
Case $hWndListView
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $Index = DllStructGetData($tInfo, "Index")
If $Index = -1 Then Return 0
Switch $iCode
Case $NM_CLICK
ConsoleWrite("Clic Gauche sur la ligne d'index " & $Index & @LF)
Case $NM_RCLICK
ConsoleWrite("Clic Droit sur la ligne d'index " & $Index & @LF)
EndSwitch
Return 0
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY