Edit2: Here is some updated code which shows what I'm after. Perhaps it will be useful to others (although you will need to change how the state of the separator is stored and detected - this will only work for one gadget):
Code: Select all
Global hSplitterGadget.l
Global old_func.l
#Button1 = 0
#Button2 = 1
#Splitter = 2
Procedure.l foo(WindowID, Message, wParam, lParam)
Static state
result.l = CallWindowProc_(old_func, WindowID, Message, wParam, lParam)
Select Message
Case #WM_LBUTTONDOWN
state = 1
Debug "pressed"
Case #WM_MOUSEMOVE
If state = 1
Debug "resizing"
EndIf
Case #WM_LBUTTONUP
state = 0
Debug "released"
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 230, 180, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "SplitterGadget")
If CreateGadgetList(WindowID(0))
hButtonGadget1 = ButtonGadget(#Button1,0, 0, 0, 0, "Button 1") ; No need to specify size or coordiantes
hButtonGadget2 = ButtonGadget(#Button2,0, 0, 0, 0, "Button 2") ; as they will be sized automatically
hSplitterGadget = SplitterGadget(#Splitter, 5, 5, 220, 120, #Button1, #Button2, #PB_Splitter_Separator)
hSplitterGadget = GadgetID(#Splitter)
old_func.l = GetWindowLong_(hSplitterGadget, #GWL_WNDPROC)
If old_func = 0
old_func = GetClassLong_(hSplitterGadget, #GCL_WNDPROC)
EndIf
SetWindowLong_(hSplitterGadget, #GWL_WNDPROC, @foo())
SetGadgetAttribute(#Splitter, #PB_Splitter_FirstMinimumSize, 20)
SetGadgetAttribute(#Splitter, #PB_Splitter_SecondMinimumSize, 20)
hTextGadget = TextGadget(3, 10, 135, 210, 40, "Above GUI part shows two automatically resizing buttons inside the 230x130 SplitterGadget area.",#PB_Text_Center )
Repeat
ev = WaitWindowEvent()
Select ev
Case #PB_Event_CloseWindow : quit =1
Case #PB_Event_Gadget
EventGadgetID = EventGadgetID()
Debug "Gadget# = " + Str(EventGadgetID) + " Gadget handle = " + Str(GadgetID(EventGadgetID))
EndSelect
Until quit=1
EndIf
EndIf
SetWindowLong_(hSplitterGadget, #GWL_WNDPROC, old_func)
End

