Maybe try this one, when dragging the SplitterGadget(), the 2 Splitter child gadgets are replaced with captured images with WM_PRINT message
Code: Select all
Global ResizeSplitter
Procedure BindSplitter()
Static SplitterPos, ImgGadgetChild1, ImgChild1 = #PB_Default, ImgGadgetChild2, ImgChild2 = #PB_Default
Protected Position, hDC
Position = GetGadgetState(EventGadget())
If Not Position = SplitterPos
SplitterPos = Position
SendMessage_(GadgetID(EventGadget()), #WM_SETREDRAW, #True, 0)
If Not ResizeSplitter
If ImgChild1 = #PB_Default
ImgChild1 = CreateImage(#PB_Any, 1, 1)
ImgGadgetChild1 = ImageGadget(#PB_Any, 0, 0, 0, 0, 0)
EndIf
If ImgChild2 = #PB_Default
ImgChild2 = CreateImage(#PB_Any, 1, 1)
ImgGadgetChild2 = ImageGadget(#PB_Any, 0, 0, 0, 0, 0)
EndIf
HideGadget(0, #True) : HideGadget(3, #True)
SetGadgetAttribute(EventGadget(), #PB_Splitter_FirstGadget, ImgGadgetChild1)
SetGadgetAttribute(EventGadget(), #PB_Splitter_SecondGadget, ImgGadgetChild2)
HideGadget(ImgGadgetChild1, #False) : HideGadget(ImgGadgetChild2, #False)
ResizeSplitter = #True
EndIf
If GadgetWidth(ImgGadgetChild1) And GadgetHeight(ImgGadgetChild1)
ResizeGadget(0, #PB_Ignore, #PB_Ignore, GadgetWidth(ImgGadgetChild1), GadgetHeight(ImgGadgetChild1))
ResizeImage(ImgChild1, DesktopScaledX(GadgetWidth(ImgGadgetChild1)), DesktopScaledY(GadgetHeight(ImgGadgetChild1)))
ResizeGadget(1, 0, 0, GadgetWidth(ImgGadgetChild1)/2, GadgetHeight(ImgGadgetChild1))
ResizeGadget(2, GadgetWidth(1), 0, GadgetWidth(ImgGadgetChild1)-GadgetWidth(1), GadgetHeight(ImgGadgetChild1))
hDC = StartDrawing(ImageOutput(ImgChild1))
If hDC
SendMessage_(GadgetID(0), #WM_PRINT, hDC, #PRF_CHILDREN | #PRF_CLIENT | #PRF_NONCLIENT | #PRF_OWNED | #PRF_ERASEBKGND)
StopDrawing()
EndIf
SetGadgetState(ImgGadgetChild1, ImageID(ImgChild1))
Else
SetGadgetState(ImgGadgetChild1, 0)
EndIf
If GadgetWidth(ImgGadgetChild2) And GadgetHeight(ImgGadgetChild2)
ResizeGadget(3, #PB_Ignore, #PB_Ignore, GadgetWidth(ImgGadgetChild2), GadgetHeight(ImgGadgetChild2))
ResizeImage(ImgChild2, DesktopScaledX(GadgetWidth(ImgGadgetChild2)), DesktopScaledY(GadgetHeight(ImgGadgetChild2)))
ResizeGadget(4, 0, 0, GadgetWidth(ImgGadgetChild2)/2, GadgetHeight(ImgGadgetChild2))
ResizeGadget(5, GadgetWidth(4), 0, GadgetWidth(ImgGadgetChild2)-GadgetWidth(4), GadgetHeight(ImgGadgetChild2))
hDC = StartDrawing(ImageOutput(ImgChild2))
If hDC
SendMessage_(GadgetID(3), #WM_PRINT, hDC, #PRF_CHILDREN | #PRF_CLIENT | #PRF_NONCLIENT | #PRF_OWNED | #PRF_ERASEBKGND)
StopDrawing()
EndIf
SetGadgetState(ImgGadgetChild2, ImageID(ImgChild2))
Else
SetGadgetState(ImgGadgetChild2, 0)
EndIf
UpdateWindow_(GadgetID(EventGadget()))
Else
SendMessage_(GadgetID(EventGadget()), #WM_SETREDRAW, #False, 0)
;Debug "Event received with same Splitter position"
EndIf
EndProcedure
Procedure WinResize()
ResizeGadget(6, #PB_Ignore, #PB_Ignore, WindowWidth(0), WindowHeight(0))
EndProcedure
OpenWindow(0, 0, 0, 400, 300, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
ContainerGadget(0, 0, 0, 400, 150)
ExplorerListGadget(1, 0, 0, 200, 150, "c:\") ; Top left.
ExplorerListGadget(2, 200, 0, 200, 150, "c:\temp\") ; Top right.
CloseGadgetList()
;SetWindowLongPtr_(GadgetID(0), #GWL_STYLE, GetWindowLongPtr_(GadgetID(0), #GWL_STYLE) | #WS_CLIPCHILDREN)
ContainerGadget(3, 0, 150, 400, 150)
EditorGadget(4, 0, 0, 200, 150) : SetGadgetText(4, "c:\") ; Bottom left.
EditorGadget(5, 200, 0, 200, 150) : SetGadgetText(5, "c:\temp\") ; Bottom right.
CloseGadgetList()
;SetWindowLongPtr_(GadgetID(3), #GWL_STYLE, GetWindowLongPtr_(GadgetID(3), #GWL_STYLE) | #WS_CLIPCHILDREN)
SplitterGadget(6, 0, 0, 400, 300, 0, 3, #PB_Splitter_Separator) ; Separate the top two gadgets from the bottom two.
BindGadgetEvent(6, @BindSplitter())
BindEvent(#PB_Event_SizeWindow, @WinResize())
Repeat
EventID = WaitWindowEvent()
If ResizeSplitter = #True
;Better here than using #WM_LBUTTONUP when an event is sent following a resize, without a left button up
;32768 Or $8000: the most significant bit is set. If the high-order bit is 1, the key is down, otherwise, it is up.
If Not (GetKeyState_(#VK_LBUTTON) & 32768)
HideGadget(GetGadgetAttribute(6, #PB_Splitter_FirstGadget), #True)
HideGadget(GetGadgetAttribute(6, #PB_Splitter_SecondGadget), #True)
SetGadgetAttribute(6, #PB_Splitter_FirstGadget, 0)
SetGadgetAttribute(6, #PB_Splitter_SecondGadget, 3)
HideGadget(0, #False) : HideGadget(3, #False)
SendMessage_(GadgetID(6), #WM_SETREDRAW, #True, 0)
RedrawWindow_(GadgetID(6), #Null, #Null, #RDW_INVALIDATE | #RDW_ERASENOW | #RDW_ALLCHILDREN | #RDW_UPDATENOW)
ResizeSplitter = #False
EndIf
EndIf
Until EventID = #PB_Event_CloseWindow