http://www.purebasic.fr/german/viewtopi ... 32#p303932
I modify a bit to add another StringGadget, all additions have ;*** at the end of the line.
Is this the correct way to add more gadgets, it seams to work, should I be using OldWinProc for more than one gadget.

Code: Select all
;CanvasGadgetContainer
Global OldWinProc.i
Procedure WinCallback (hWnd, uMsg, wParam, lParam)
Static Cursor.i = -1
Define Tme.TRACKMOUSEEVENT
Select uMsg
Case #WM_MOUSEMOVE ;notwendig, wenn kein XP Skin Support
Tme\cbSize = SizeOf (TRACKMOUSEEVENT)
Tme\dwFlags = #TME_LEAVE
Tme\hwndTrack = hwnd
TrackMouseEvent_(Tme)
Case #WM_LBUTTONDBLCLK
SetFocus_(hWnd)
Case #WM_SETCURSOR
If PeekW (@lParam) = #HTCLIENT
If Cursor = -1
Cursor = GetGadgetAttribute (0, #PB_Canvas_Cursor)
EndIf
SetGadgetAttribute (0, #PB_Canvas_Cursor, #PB_Cursor_IBeam)
EndIf
Case #WM_MOUSELEAVE
SetGadgetAttribute (0, #PB_Canvas_Cursor, Cursor)
Cursor = -1
EndSelect
ProcedureReturn CallWindowProc_(OldWinProc ,hWnd ,uMsg, wParam, lParam)
EndProcedure
If OpenWindow(0, 0, 0, 220, 220, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 10, 10, 200, 200, #PB_Canvas_Keyboard|#PB_Canvas_DrawFocus)
LongPtr = GetWindowLongPtr_(GadgetID(0), #GWL_STYLE)
SetWindowLongPtr_(GadgetID(0), #GWL_STYLE, LongPtr|#WS_CLIPCHILDREN)
StringGadget (1, 10, 90, 180, 20, "Test1")
StringGadget (2, 10, 115, 180, 20, "Test2") ;***
SetParent_ (GadgetID(1), GadgetID(0))
SetParent_ (GadgetID(2), GadgetID(0)) ;***
OldWinProc = SetWindowLongPtr_ (GadgetID(1), #GWL_WNDPROC, @WinCallback())
OldWinProc = SetWindowLongPtr_ (GadgetID(2), #GWL_WNDPROC, @WinCallback()) ;***
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = 0
If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(0, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
If StartDrawing(CanvasOutput(0))
x = GetGadgetAttribute(0, #PB_Canvas_MouseX)
y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
Circle(x, y, 10, RGB(Random(255), Random(255), Random(255)))
StopDrawing()
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf