Что нового

Как узнать, разворачивается ли древовидный список при нажатии?

vovsla

Осваивающий
Сообщения
607
Репутация
36
Цель - ускорить работу при взаимодействии с элементом TreeView
Для этого в элемент вписываются только родительские пункты и помечаются как имеющие дочерние.
Дочерние пункты должны добавляться только при раскрытии родительского пункта.
Функция _GUICtrlTreeView_GetExpanded возвращает состояние до нажатия мышкой
Желательно реализовать через WM_NOTIFY, но не нашел какие значения за это отвечают

Как понять, что было инициировано раскрытие списка?
 
Автор
V

vovsla

Осваивающий
Сообщения
607
Репутация
36
Хотя, по событию наверно не получится. Получается, что нужно определять было нажатие на плюс для раскрытия или нет...
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <StructureConstants.au3>
#include <GUIConstants.au3>
#include <TreeViewConstants.au3>

Global $iTreeView

GUICreate("", 400, 400)
$iTreeView = GUICtrlCreateTreeView(10, 10, 380, 380)
GUICtrlCreateTreeViewItem("2", GUICtrlCreateTreeViewItem("1", $iTreeView))
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
	Local $tNMHDR, $iIDFrom, $iCode, $tNMTREEVIEW, $iAction
	$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
	Switch $iIDFrom
		Case $iTreeView
			$tNMTREEVIEW = DllStructCreate($tagNMTREEVIEW, $lParam)
			$iCode = DllStructGetData($tNMHDR, "Code")
			Switch $iCode
				Case $TVN_ITEMEXPANDINGA, $TVN_ITEMEXPANDINGW
					$iAction = DllStructGetData($tNMTREEVIEW, "Action")
					Switch $iAction
						Case $TVE_COLLAPSE
							ConsoleWrite("TVN_ITEMEXPANDING - TVE_COLLAPSE" & @LF)
						Case $TVE_EXPAND
							ConsoleWrite("TVN_ITEMEXPANDING - TVE_EXPAND" & @LF)
					EndSwitch
				Case $TVN_ITEMEXPANDEDA, $TVN_ITEMEXPANDEDW
					$iAction = DllStructGetData($tNMTREEVIEW, "Action")
					Switch $iAction
						Case $TVE_COLLAPSE
							ConsoleWrite("TVN_ITEMEXPANDED - TVE_COLLAPSE" & @LF)
						Case $TVE_EXPAND
							ConsoleWrite("TVN_ITEMEXPANDED - TVE_EXPAND" & @LF)
					EndSwitch
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
 
Верх