#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <WindowsConstants.au3>
Local $GUI, $Item[10]
Global $hTreeView, $nParam, $np
Local $iStyle = BitOR($TVS_HASBUTTONS, $TVS_EDITLABELS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)
$GUI = GUICreate("Устанавливает параметр пункта (UDF)", 400, 300)
$hTreeView = _GUICtrlTreeView_Create($GUI, 2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
GUISetState()
_GUICtrlTreeView_BeginUpdate($hTreeView)
For $x = 0 To 9
$Item[$x] = _GUICtrlTreeView_Add($hTreeView, 0, StringFormat("[%01d] Пункт", $x))
_GUICtrlTreeView_SetItemParam($hTreeView, $Item[$x], $x + 1)
;~ $np += 1
;~ Assign(Eval('np'), '_msg()', 2); создаем переменную с тем же именем, что и ассоциативное значение пункта
Next
_GUICtrlTreeView_EndUpdate($hTreeView)
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
Do
If $nParam Then
;~ Execute(Eval($nParam)); по ассоциативному значению пункта вызываем функцию из переменной с таким же именем
_msg()
$nParam = 0
EndIf
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $tStruct = DllStructCreate('struct;hwnd hWndFrom;uint_ptr IDFrom;INT Code;endstruct;' & _
'uint Action;struct;uint OldMask;handle OldhItem;uint OldState;uint OldStateMask;' & _
'ptr OldText;int OldTextMax;int OldImage;int OldSelectedImage;int OldChildren;lparam OldParam;endstruct;' & _
'struct;uint NewMask;handle NewhItem;uint NewState;uint NewStateMask;' & _
'ptr NewText;int NewTextMax;int NewImage;int NewSelectedImage;int NewChildren;lparam NewParam;endstruct;' & _
'struct;long PointX;long PointY;endstruct', $lParam)
Local $hWndFrom = DllStructGetData($tStruct, 'hWndFrom')
If $hWndFrom = $hTreeView Then
Switch DllStructGetData($tStruct, 'Code')
Case $TVN_SELCHANGEDA, $TVN_SELCHANGEDW
$nParam = DllStructGetData($tStruct, 'NewParam') ; ассоциативное значение
EndSwitch
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func _msg()
Switch $nParam
Case 1
FileOpenDialog('', '', '(*)')
Case 2
FileSelectFolder('', '')
Case 3
Run('cmd.exe')
Case Else
MsgBox(64, '', $nParam)
EndSwitch
EndFunc ;==>_msg