I was able to fix this by splicing in portions of
Shagwana's event hook example. It involved three changes: making Can global, putting in an AddHook before the main loop, and adding an EventHook function:
Strict
Const MENU_EXIT = 105
Const MENU_ABOUT = 109
Local win:TGadget = CreateWindow ( "WINDOW", 50,100, 700,500, Null, WINDOW_TITLEBAR|WINDOW_MENU|WINDOW_STATUS|WINDOW_CLIENTCOORDS )
Global can:TGadget = CreateCanvas(0,0,700,500,win,1) ' *** CHANGE 1 ***
SetGadgetLayout can,1,1,1,1
' create menu
Local filemenu:TGadget = CreateMenu("&File",0,WindowMenu(win))
CreateMenu"E&xit",MENU_EXIT,filemenu
Local helpmenu:TGadget = CreateMenu("&Help",0,WindowMenu(win))
CreateMenu "&About",MENU_ABOUT,helpmenu
UpdateWindowMenu win
AddHook EmitEventHook,EventHook 'Add in an event hook *** CHANGE 2 ***
Local timer:TTimer = CreateTimer (10)
' Main loop
While WaitEvent()
Select EventID()
Case EVENT_TIMERTICK
updateCanvas(can)
' Print "Tick!"
Case EVENT_WINDOWCLOSE
'
' Quit
End
Case EVENT_MENUACTION
'
' Menu stuff
Select EventData()
Case MENU_EXIT
End
Case MENU_ABOUT
Notify "A WINDOW!~nBy IDIOT"
End Select
Default
'
' Uncomment this to show what other events occur
' Print CurrentEvent.toString()
EndSelect
Wend
Function updateCanvas(can:TGadget)
'
' Draw to the canvas
SetGraphics CanvasGraphics(can)
'
' Make sure it has the correct dimensions
SetViewport 0,0,GadgetWidth(can),GadgetHeight(can)
SetBlend SOLIDBLEND
Cls
Flip
End Function
' *** CHANGE 3 ***
Function EventHook:Object(iId,tData:Object,tContext:Object)
Local Event:TEvent=TEvent(tData)
Select Event.Source
Case Can
'Canvas event
Select Event.id
Case EVENT_GADGETPAINT
'Needs redrawing
updateCanvas(can) 'Go redraw the display
Return Null 'Dont pass the event back as its been delt with
End Select
End Select
'Passback...
Return Event 'Event pass through (nothing thats been captured)
End FunctionThis also keeps the About box from leaving a trail when you drag it around. I guess it's time for me to start using event hooks, myself - they look mighty handy. :)