Что нового

[Элементы GUI] Двойной клик по TreeView...

DeadBoy

Новичок
Сообщения
6
Репутация
0
Друзья, сори если было...

Есть код, который банально создает TreeView, в нем один главный элемент а в нем три дочерних. Как отследить двойной клик по любому из элементов? Если можно, подробно комментируйте код...

P.S. Свой код выкладывать не буду, три строки буквально)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
DeadBoy,
Посмотрите в справке пример к функции _GUICtrlTreeView_Create(), а в нем функцию WM_NOTIFY(). Вам нужно отслеживать $NM_DBLCLK.
 
Автор
D

DeadBoy

Новичок
Сообщения
6
Репутация
0
Посмотрел, а нет вариантов проще?
 
Автор
D

DeadBoy

Новичок
Сообщения
6
Репутация
0
Печально, но ничего не понятно(
 
Автор
D

DeadBoy

Новичок
Сообщения
6
Репутация
0
Вообщем) Код из справки отрезал вот до этого) Теперь хочу чтобы при двойном клике в MsgBox выползало название элемента по которому кликнули...

Код:
#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <WindowsConstants.au3>

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

Global $hTreeView

    Local $GUI, $hItem
    Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)
    $GUI = GUICreate("TreeView", 400, 300)
    $hTreeView = _GUICtrlTreeView_Create($GUI, 2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
    GUISetState()

    _GUICtrlTreeView_BeginUpdate($hTreeView)
        $hItem = _GUICtrlTreeView_Add($hTreeView, 0, "New_Item")
            _GUICtrlTreeView_AddChild($hTreeView, $hItem, "New_Child")
			_GUICtrlTreeView_AddChild($hTreeView, $hItem, "New_Child_2")
			_GUICtrlTreeView_AddChild($hTreeView, $hItem, "New_Child_3")
    _GUICtrlTreeView_EndUpdate($hTreeView)

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview
    $hWndTreeview = $hTreeView
    If Not IsHWnd($hTreeView) Then $hWndTreeview = GUICtrlGetHandle($hTreeView)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndTreeview
            Switch $iCode
				Case $NM_DBLCLK
					MsgBox(64, ":)", $text)
                    Return 0
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc

Да, спрошу еще раз, неужели двойной клик по другому не отследить? Или переписать под While 1/WEnd

P.S. Сори, я чайник... :laugh:

И не пойму, какая разница:

Код:
_GUICtrlTreeView_Add
и
Код:
GUICtrlCreateTreeViewItem
:scratch:
 
Автор
D

DeadBoy

Новичок
Сообщения
6
Репутация
0
И неужели так обязательно использовать:
Код:
_GUICtrlTreeView_AddChild
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
DeadBoy

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 
Автор
D

DeadBoy

Новичок
Сообщения
6
Репутация
0
Так что, никто не поможет? Хоть скажите куда копать? :(
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
DeadBoy [?]
Так что, никто не поможет? Хоть скажите куда копать?

Код:
#include <WinAPI.au3>

;...........................
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview
    $hWndTreeview = $hTreeView
    If Not IsHWnd($hTreeView) Then $hWndTreeview = GUICtrlGetHandle($hTreeView)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndTreeview
            Switch $iCode
                Case $NM_DBLCLK
                    $hItem=__TV_GetItemHandle($hWndFrom)
					$sText=_GUICtrlTreeView_GetText($hWndFrom, $hItem)
					MsgBox(64, "", $sText)
                    Return 0
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc
	
Func __TV_GetItemHandle($hTV)
  $tPoint = _WinAPI_GetMousePos(1, $hTV)
  $tTVHTI = _GUICtrlTreeView_HitTestEx($hTV, DllStructGetData($tPoint, 1), DllStructGetData($tPoint, 2))
  $hItem = DllStructGetData($tTVHTI, 'Item')
  Return $hItem
EndFunc
 
Верх