UDF > GUI > GuiTreeView >


_GUICtrlTreeView_Create

Crée un contrôle TreeView pour traiter des données organisées en arbre

#include <GuiTreeView.au3>
_GUICtrlTreeView_Create ( $hWnd, $iX, $iY [, $iWidth = 150 [, $iHeight = 150 [, $iStyle = 0x00000037 [, $iExStyle = 0x00000000]]]] )

Paramètres

$hWnd Handle de la fenêtre parent ou propriétaire
$iX Position horizontale du contrôle
$iY Position verticale du contrôle
$iWidth [optionnel] Largeur du contrôle
$iHeight [optionnel] Hauteur de contrôle
$iStyle [optionnel] Style du contrôle:
    $TVS_CHECKBOXES - Installe des cases à cocher pour les noeuds. Une case à cocher ne s'affichera que si une image est associée au noeud.
        Pour cette option, le contrôle utilise efficacement DrawFrameControl pour créer et définir une liste d'images d'état contenant deux images.
        L'image de l'état 1 est la case décochée et l'image de l'état 2 est la case cochée.
        Définir l'état de l'image à zéro supprime la case à cocher.
        La version 5.80 affiche une case à cocher, même si aucune image n'est associée au noeud.
    $TVS_DISABLEDRAGDROP - Empêche le contrôle d'envoyer des messages de notification $TVN_BEGINDRAG
    $TVS_EDITLABELS - Permet à l'utilisateur de modifier les étiquettes des noeuds
    $TVS_FULLROWSELECT - Permet la sélection d'une rangée entière.
        La totalité de la ligne du noeud sélectionné est mise en surbrillance et un clic n'importe où sur la ligne du noeud, provoquera sa sélection.
        Cette option ne peut pas être utilisée en conjonction avec le style $TVS_HASLINES.
    $TVS_HASBUTTONS - Affiche les boutons plus et moins à côté des noeuds parents.
        L'utilisateur clique sur les boutons pour développer ou réduire la liste des noeuds enfants du noeud parent.
        Pour inclure des boutons associés aux noeuds de la racine, vous devez également spécifier $TVS_LINESATROOT.
    $TVS_HASLINES - Utilise des lignes pour afficher la hiérarchie des noeuds
    $TVS_INFOTIP- Obtient des informations d'info-bulle en envoyant la notification $TVN_GETINFOTIP
    $TVS_LINESATROOT - Utilise des lignes pour lier les noeuds de la racine du contrôle. Cette valeur est ignorée si
    $TVS_HASLINES n'est pas aussi spécifiée.
    $TVS_NOHSCROLL - Désactive le défilement horizontal dans le contrôle. Le contrôle n'affichera pas les barres de défilement horizontal.
    $TVS_NONEVENHEIGHT - Définit la hauteur des noeuds à une hauteur paire avec le message $TVM_SETITEMHEIGHT.
        Par défaut, la hauteur des noeuds doit avoir une valeur impaire.
    $TVS_NOSCROLL - Désactive à la fois le défilement horizontal et vertical dans le contrôle. Le contrôle n'affichera pas les barres de défilement.
    $TVS_NOTOOLTIPS- Désactive les info-bulles
    $TVS_RTLREADING - Définit l'affichage du texte de droite à gauche
    $TVS_SHOWSELALWAYS - Oblige un noeud sélectionné à rester sélectionné lorsque le contrôle perd le focus
    $TVS_SINGLEEXPAND - Oblige un noeud en cours de sélection à se développer et un noeud en cours de désélection à se réduire.
        Si la souris est utilisée en simple clic pour sélectionner un noeud et que le noeud est fermé est fermé, il sera développé.
        Si l'utilisateur maintient la touche CTRL enfoncée tout en sélectionnant un objet, le noeud en cours de désélection ne sera pas réduit.
        La version 5.80 oblige le noeud en cours de sélection à se développer et le noeud en cours de désélection à se réduire.
        Si l'utilisateur maintient la touche CTRL enfoncée tout en sélectionnant un noeud, le noeud en cours de désélection ne sera pas réduit.
    $TVS_TRACKSELECT - Oblige la mise à jour en temps réel

Par défaut: $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS
Forcés: $WS_CHILD, $WS_VISIBLE
$iExStyle [optionnel] Style de contrôle étendu

Valeur de retour

Succès: Retourne le handle du contrôle.
Échec: Retourne 0.

Remarque

Cette fonction est destinée aux utilisateurs avertis et à ceux qui désirent comprendre le fonctionnement du contrôle.

En relation

_GUICtrlTreeView_Destroy

Exemple

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

Global $g_hTreeView

Example()

Func Example()
    Local $hGUI, $hItem
    Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
    $hGUI = GUICreate("(UDF Created) TreeView Create", 400, 300)

    $g_hTreeView = _GUICtrlTreeView_Create($hGUI, 2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
    GUISetState(@SW_SHOW)

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    _GUICtrlTreeView_BeginUpdate($g_hTreeView)
    For $x = 1 To Random(2, 10, 1)
        $hItem = _GUICtrlTreeView_Add($g_hTreeView, 0, StringFormat("[%02d] New Item", $x))
        For $y = 1 To Random(2, 10, 1)
            _GUICtrlTreeView_AddChild($g_hTreeView, $hItem, StringFormat("[%02d] New Child", $y))
        Next
    Next
    _GUICtrlTreeView_EndUpdate($g_hTreeView)

    ; Boucle jusqu'à ce que l'utilisateur quitte.
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
EndFunc   ;==>Example

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview
    $hWndTreeview = $g_hTreeView
    If Not IsHWnd($g_hTreeView) Then $hWndTreeview = GUICtrlGetHandle($g_hTreeView)

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndTreeview
            Switch $iCode
                Case $NM_CLICK ; L'utilisateur a cliqué sur le bouton gauche de la souris dans le contrôle
                    _DebugPrint("$NM_CLICK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Retour 1; non nul pour interdire le traitement par défaut
                    Return 0 ; zéro pour permettre le traitement par défaut
                Case $NM_DBLCLK ; L'utilisateur a double-cliqué sur le bouton gauche de la souris dans le contrôle
                    _DebugPrint("$NM_DBLCLK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Retour 1; non nul pour interdire le traitement par défaut
                    Return 0 ; zéro pour permettre le traitement par défaut
                Case $NM_RCLICK ; L'utilisateur a cliqué sur le bouton droit de la souris dans le contrôle
                    _DebugPrint("$NM_RCLICK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Retour 1; non nul pour interdire le traitement par défaut
                    Return 0 ; zéro pour permettre le traitement par défaut
                Case $NM_RDBLCLK ; L'utilisateur a double-cliqué sur le bouton droit de la souris dans le contrôle
                    _DebugPrint("$NM_RDBLCLK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Retour 1; non nul pour interdire le traitement par défaut
                    Return 0 ; zéro pour permettre le traitement par défaut
                Case $NM_KILLFOCUS ; Le contrôle a perdu le focus d'entrée
                    _DebugPrint("$NM_KILLFOCUS" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Aucune valeur de retour
                Case $NM_RETURN ; Le contrôle a le focus d'entrée et l'utilisateur a appuyé sur une touche
                    _DebugPrint("$NM_RETURN" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Retour 1; non nul pour interdire le traitement par défaut
                    Return 0 ; zéro pour permettre le traitement par défaut
                    ; Case $NM_SETCURSOR; Le contrôle positionne le curseur en réponse à un message WM_SETCURSOR
                    ; Local $TINFO = DllStructCreate ($tagNMMOUSE, $lParam)
                    ; $hwndFrom = HWnd (DllStructGetData ($TINFO," hwndFrom"))
                    ; $iIDFrom = DllStructGetData ($TINFO," IDFrom")
                    ; $iCode = DllStructGetData ($TINFO, «Code»)
                    ; _DebugPrint (\"$NM_SETCURSOR" et CRLF &" - > hwndFrom :\" & TAB & $& hwndFrom CRLF & _
                    ; » - > IDFrom :\" & TAB & $& iIDFrom CRLF & _
                    ; » - > Code Promo:" & TAB & $& iCode CRLF & _
                    ; » - > ItemSpec :\" & TAB & DllStructGetData ($TINFO," ItemSpec") et CRLF & _
                    ; » - > ItemData :\" & TAB & DllStructGetData ($TINFO," ItemData") et CRLF & _
                    ;"-> X :\" & TAB DllStructGetData & ($TINFO,"X\") et CRLF & _
                    ; » - > Y :\" & TAB & DllStructGetData ($TINFO,"Y\") et CRLF & _
                    ; » - > HitInfo :\" & TAB & DllStructGetData ($TINFO," HitInfo"))
                    ; Retour 0; pour demander au contrôle de gérer le curseur
                    ; Retour 1; non nul pour empêcher le contrôle de gérer le curseur
                Case $NM_SETFOCUS ; Le contrôle a reçu le focus d'entrée
                    _DebugPrint("$NM_SETFOCUS" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
                            "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
                            "-->Code:" & @TAB & $iCode)
                    ; Aucune valeur de retour
                Case $TVN_BEGINDRAGA, $TVN_BEGINDRAGW
                    _DebugPrint("$TVN_BEGINDRAG")
                Case $TVN_BEGINLABELEDITA, $TVN_BEGINLABELEDITW
                    _DebugPrint("$TVN_BEGINLABELEDIT")
                Case $TVN_BEGINRDRAGA, $TVN_BEGINRDRAGW
                    _DebugPrint("$TVN_BEGINRDRAG")
                Case $TVN_DELETEITEMA, $TVN_DELETEITEMW
                    _DebugPrint("$TVN_DELETEITEM")
                Case $TVN_ENDLABELEDITA, $TVN_ENDLABELEDITW
                    _DebugPrint("$TVN_ENDLABELEDIT")
                Case $TVN_GETDISPINFOA, $TVN_GETDISPINFOW
                    _DebugPrint("$TVN_GETDISPINFO")
                Case $TVN_GETINFOTIPA, $TVN_GETINFOTIPW
                    _DebugPrint("$TVN_GETINFOTIP")
                Case $TVN_ITEMEXPANDEDA, $TVN_ITEMEXPANDEDW
                    _DebugPrint("$TVN_ITEMEXPANDED")
                Case $TVN_ITEMEXPANDINGA, $TVN_ITEMEXPANDINGW
                    _DebugPrint("$TVN_ITEMEXPANDING")
                Case $TVN_KEYDOWN
                    _DebugPrint("$TVN_KEYDOWN")
                Case $TVN_SELCHANGEDA, $TVN_SELCHANGEDW
                    _DebugPrint("$TVN_SELCHANGED")
                Case $TVN_SELCHANGINGA, $TVN_SELCHANGINGW
                    _DebugPrint("$TVN_SELCHANGING")
                Case $TVN_SETDISPINFOA, $TVN_SETDISPINFOW
                    _DebugPrint("$TVN_SETDISPINFO")
                Case $TVN_SINGLEEXPAND
                    _DebugPrint("$TVN_SINGLEEXPAND")
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _DebugPrint($s_Text , $sLine = @ScriptLineNumber)
    ConsoleWrite( _
            "!===========================================================" & @CRLF & _
            "+======================================================" & @CRLF & _
            "-->Line(" & StringFormat("%04d", $sLine) & "):" & @TAB & $s_Text  & @CRLF & _
            "+======================================================" & @CRLF)
EndFunc   ;==>_DebugPrint