je galère sur les TreeGadget CustomDraw (personnalisez quoi)
je butte sur la récupèration des informations suivantes avec l'API :
- élément sélectionné
- élément coché
- élément déployé (noeud ouvert).
- élément à un noeuds
- texte de l'élément
car avec PB, pas de problème (sauf pour savoir si l'élément à un noeud)
Code : Tout sélectionner
Enumeration
#RechercheFichier_Tree
EndEnumeration
Procedure.l TreeGadget_CustomDraw(WindowID.l, Message.l, wParam.l, lParam.l)
#NM_CUSTOMDRAW = #NM_FIRST - 12
#CDDS_ITEM = $10000
#CDDS_SUBITEM = $20000
#CDDS_PREPAINT = $1
#CDDS_POSTPAINT = $2
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
#CDDS_ITEMPOSTPAINT = #CDDS_ITEM | #CDDS_POSTPAINT
#CDDS_SUBITEMPREPAINT = #CDDS_SUBITEM | #CDDS_ITEMPREPAINT
#CDRF_DODEFAULT = $0
#CDRF_NEWFONT = $2
#CDRF_SKIPDEFAULT = $4
#CDRF_NOTIFYITEMDRAW = $20
#CDRF_NOTIFYPOSTPAINT = $10
#CDRF_NOTIFYSUBITEMDRAW = $20
#CDIS_SELECTED = $1
#CDIS_CHECKED = $8
If Message = #WM_NOTIFY
*TVCDHeader.NMTVCUSTOMDRAW = lParam
If *TVCDHeader\nmcd\hdr\hWndFrom = GadgetID(#RechercheFichier_Tree) And * TVCDHeader\nmcd\hdr\code = #NM_CUSTOMDRAW
Select *TVCDHeader\nmcd\dwDrawStage
Case #CDDS_PREPAINT
ProcedureReturn #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
Debug *TVCDHeader\nmcd\uItemState
If *TVCDHeader\nmcd\uItemState & #CDIS_SELECTED ; Si sélectionné
Debug "Sélectionné"
EndIf
If *TVCDHeader\nmcd\uItemState & #CDIS_CHECKED ; Si coché
Debug "Coché"
EndIf
Element = TreeGadgetItemNumber(#RechercheFichier_Tree, *TVCDHeader\nmcd\dwItemSpec)
Etat = GetGadgetItemState(#RechercheFichier_Tree, Element)
If Etat & #PB_Tree_Selected ; Si sélectionné
Debug "PB : Sélectionné"
EndIf
If Etat & #PB_Tree_Checked ; Si coché
Debug "PB : Coché"
EndIf
If Etat & #PB_Tree_Expanded ; Si coché
Debug "PB : Déployé"
EndIf
Debug "PB : Texte = " + GetGadgetItemText(#RechercheFichier_Tree, Element, 0)
Debug ""
ProcedureReturn #CDRF_NEWFONT
Default
ProcedureReturn #PB_ProcessPureBasicEvents
EndSelect
Else
ProcedureReturn #PB_ProcessPureBasicEvents
EndIf
Else
ProcedureReturn #PB_ProcessPureBasicEvents
EndIf
EndProcedure
; Ouvre une fenêtre
If OpenWindow(0, 0, 0, 500, 450, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
MessageRequester("Erreur", "Imossible de créer la fenêtre")
End
EndIf
TreeGadget(#RechercheFichier_Tree, 0, 0, 500, 400, #PB_Tree_AlwaysShowSelection | #PB_Tree_CheckBoxes)
SetWindowCallback( @TreeGadget_CustomDraw())
For n = 1 To 10
AddGadgetItem(#RechercheFichier_Tree, -1, "Elément " + Str(n))
Next
OpenTreeGadgetNode(#RechercheFichier_Tree)
For n = 11 To 20
AddGadgetItem(#RechercheFichier_Tree, -1, "Elément " + Str(n))
Next
CloseTreeGadgetNode(#RechercheFichier_Tree)
For n = 21 To 30
AddGadgetItem(#RechercheFichier_Tree, -1, "Elément " + Str(n))
Next
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow