MouseOverTreeGadgetItem()

Share your advanced PureBasic knowledge/code with the community.
Inf0Byt3
PureBasic Fanatic
PureBasic Fanatic
Posts: 2236
Joined: Fri Dec 09, 2005 12:15 pm
Location: Elbonia

MouseOverTreeGadgetItem()

Post by Inf0Byt3 »

Maybe somebody will find this useful:

Code: Select all

Procedure MouseOverTreeGadgetItem(WindowID,TreeGadgetID)

  ;If the cursor hovers over a treegadget item, it will return the 
  ;item number, else it returns -1. Use in conjunstion with the
  ;#WM_MOUSEMOVE window event
  ;
  ;Based on code from Sparkie / Srod

  MyPoint.point\x = WindowMouseX(WindowID) 
  MyPoint\y = WindowMouseY(WindowID)
  MapWindowPoints_(WindowID(WindowID),GadgetID(TreeGadgetID),@MyPoint,1)
  HitTest.TV_HITTESTINFO 
  HitTest\pt\x = MyPoint\x 
  HitTest\pt\y = MyPoint\y
  SendMessage_(GadgetID(TreeGadgetID), #TVM_HITTEST, 0, HitTest)
  For Check = 0 To CountGadgetItems(TreeGadgetID)-1
   If HitTest\hItem = GadgetItemID(TreeGadgetID,Check)  
    ProcedureReturn Check
   EndIf
  Next
  ProcedureReturn -1
  
EndProcedure

;Example
If OpenWindow(0, 0, 0, 350, 200, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  TreeGadget(0, 10, 10, 180, 180)
  
  For i = 0 To 5
    AddGadgetItem (0, -1, "Item "+ Str(i))
    AddGadgetItem (0, -1, "Parent " + Str(i))
    AddGadgetItem(0, -1, "Sub Item 1")
    AddGadgetItem(0, -1, "Sub Item 2")
    AddGadgetItem(0, -1, "Sub Item 3")
    AddGadgetItem(0, -1, "Sub Item 4")
  Next
  
  Repeat
   event = WaitWindowEvent()
   If Event = #WM_MOUSEMOVE And EventGadget() = 0
    Debug MouseOverTreeGadgetItem(0,0)
   EndIf
   
  Until event = #PB_Event_CloseWindow
  
EndIf

None are more hopelessly enslaved than those who falsely believe they are free. (Goethe)