#Include <GUIConstantsEx.au3>
#Include <GUIListView.au3>
#Include <WindowsConstants.au3>
Opt('MustDeclareVars', 1)
Global $hForm, $hLV, $Dummy1, $Dummy2
Global $ID, $Item1, $Item2
Global $Exit = False
$hForm = GUICreate('MyGUI', 300, 300)
$hLV = GUICtrlGetHandle(GUICtrlCreateListView('Name', 0, 0, 300, 300, -1, 0))
For $i = 1 To 4
_GUICtrlListView_AddItem($hLV, 'Item' & $i)
Next
_GUICtrlListView_SetItemSelected($hLV, 0, 1, 1)
$Item1 = 0
$Item2 =-1
$Dummy1 = GUICtrlCreateDummy()
$Dummy2 = GUICtrlCreateDummy()
GUISetOnEvent($GUI_EVENT_CLOSE, '_GUIEvents', $hForm)
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUISetState()
While 1
Switch GUIGetMsg()
Case 0
ContinueLoop
Case $GUI_EVENT_CLOSE
Exit
Case $Dummy1
Opt('GUIOnEventMode', 1)
Do
$ID = $Item1
_Something($ID)
Until $ID = $Item1
Opt('GUIOnEventMode', 0)
If $Item1 = $Item2 Then
ContinueCase
EndIf
Case $Dummy2
MsgBox(0, '', 'Item' & ($Item2 + 1) & ' is activated.')
EndSwitch
WEnd
Func _Something($Item)
ConsoleWrite('Something is done with Item' & ($Item + 1))
For $i = 1 To 10
ConsoleWrite('.')
If $Exit Then
Exit
EndIf
Sleep(100)
Next
ConsoleWrite('OK' & @CR)
EndFunc ;==>_Something
Func _GUIEvents()
Switch @GUI_WinHandle
Case $hForm
Switch @GUI_CtrlId
Case $GUI_EVENT_CLOSE
$Exit = 1
EndSwitch
EndSwitch
EndFunc ;==>_GUIEvents
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
Local $tNMIA = DllStructCreate($tagNMITEMACTIVATE, $lParam)
Local $hTarget = DllStructGetData($tNMIA, 'hWndFrom')
Local $ID = DllStructGetData($tNMIA, 'Code')
Switch $hWnd
Case 0
Case $hForm
Switch $hTarget
Case $hLV
Switch $ID
Case $LVN_BEGINDRAG
Return 0
Case $LVN_ITEMACTIVATE
$Item2 = $Item1
GUICtrlSendToDummy($Dummy2)
Case $LVN_ITEMCHANGED
If (BitAND(DllStructGetData($tNMIA, 'NewState'), $LVIS_SELECTED)) And (Not BitAND(DllStructGetData($tNMIA, 'OldState'), $LVIS_FOCUSED)) Then
$Item1 = DllStructGetData($tNMIA, 'Index')
$Item2 = -1
GUICtrlSendToDummy($Dummy1)
EndIf
Case $NM_CLICK, $NM_DBLCLK, $NM_RCLICK, $NM_RDBLCLK
Return 0
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY