TreeView rechte Mausclick

  • Hallo,

    ich hab ein TreeView

    Wenn ich auf ein Nicht-selektiertes TreeView-Item mit rechter Maustaste klicke und wieder loslasse, wird wieder das vorher angewählte Item selektiert.
    Ich möchte jedoch das vorher mit rechts angewählte Item selektiert lassen.
    Im Beispiel oben habe ich mit rechter-Maustaste auf "87687" geklickt und losgelassen und schon springt er wieder auf "Bewerbung".
    Ist bestimmt einfach, finde jedoch kein Ansatz..

    2 Mal editiert, zuletzt von Torni (1. November 2012 um 23:12)

  • Da reicht der Code von nem normalen TreeView:

    Spoiler anzeigen
    [autoit]


    #include<GUIConstantsEx.au3>
    #include<GuiTreeView.au3>
    #include<TreeViewConstants.au3>
    #include<WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate('TreeView', 200, 200)
    Global $hTreeView = GUICtrlCreateTreeView(5, 5, 190, 190, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
    Global $hRoot = GUICtrlCreateTreeViewItem('Test', $hTreeView)
    _GUICtrlTreeView_BeginUpdate($hTreeView)
    For $x = 1 To 3
    $hItem1 = _GUICtrlTreeView_AddChild($hTreeView, GUICtrlGetHandle($hRoot), StringFormat('d', $x))
    Next
    _GUICtrlTreeView_EndUpdate($hTreeView)
    _GUICtrlTreeView_Expand($hTreeView)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Das Verhalten ist da automatisch drin. Sobald man mit rechts was anderes anklickt und loslässt ist er wieder beim vorher Selektierten.

    Mein Versuch war ein Codeschnipsel den ich irgendwo gefunden habe, per WM_Notify die rechte Maus abzufangen:

    [autoit]


    Case $NM_RCLICK
    $tPoint = _WinAPI_GetMousePos(1, $hTreeView)
    $tTVHTI = _GUICtrlTreeView_HitTestEx($hTreeView, DllStructGetData($tPoint, 1), DllStructGetData($tPoint, 2))
    $hItem = DllStructGetData($tTVHTI, 'Item')
    If BitAND(DllStructGetData($tTVHTI, 'Flags'), $TVHT_ONITEM) Then
    MsgBox(0,"", ".,.");;;;;;;;;;;;;;;;;;;;;;;;; hier kommt er nicht mal hin..
    _GUICtrlTreeView_SelectItem($hTreeView, $hItem)
    EndIf

    [/autoit]

    Wie gesagt, gefundener Code-Schnipsel.. ?( ?( ?(

    Einmal editiert, zuletzt von Torni (1. November 2012 um 16:47)

  • ok, nach langem probieren und suchen gelöst:

    [autoit]


    ...

    [/autoit][autoit][/autoit][autoit]

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

    [/autoit][autoit][/autoit][autoit]

    ....

    [/autoit][autoit][/autoit][autoit]

    Case $NM_RCLICK
    Local $tPoint = _WinAPI_GetMousePos(True, $hWndFrom), $tHitTest
    $tHitTest = _GUICtrlTreeView_HitTestEx($hWndFrom, DllStructGetData($tPoint, 1), DllStructGetData($tPoint, 2))
    If BitAND(DllStructGetData($tHitTest, "Flags"), $TVHT_ONITEM) Then
    _GUICtrlTreeView_SelectItem($hWndFrom, DllStructGetData($tHitTest, 'Item'))
    Local $sPfads = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, _GUICtrlTreeView_GetSelection($hTreeview)), $Delim1, $Delim)
    EndIf
    GUICtrlSetData($Input1, $sPfads)

    [/autoit]