Canvas Redraw - Menus/Requesters

BlitzMax Forums/BlitzMax GUI Programming/Canvas Redraw - Menus/Requesters

You need to use an eventhook to manage events when windows sends your your program into a modal loop (menu selection, window dragging, scrollbar dragging etc.)

' canvas redraw issues with requesters and menus

SuperStrict
Framework BRL.Win32MaxGUI
Import BRL.EventQueue


Import BRL.GLMax2D
SetGraphicsDriver GLMax2DDriver()
'Import BRL.D3D7Max2D
'SetGraphicsDriver D3D7Max2DDriver()


Global win:TGadget=CreateWindow("Canvas - menus/requesters",250,150,512,400,Null,15)
Global can:TGadget=CreateCanvas(10,10,win.Width-40,win.Height-40,win)

' create menus
Global MainMenu:TGadget=WindowMenu(win)
Global FileMenu:TGadget = CreateMenu("&File",  100, MainMenu)
Global EditMenu:TGadget = CreateMenu("&Edit",  200, MainMenu)
Global ToolMenu:TGadget = CreateMenu("&Tools", 300, MainMenu)
CreateMenu("New",					101, FileMenu)
CreateMenu("",						000, FileMenu)
CreateMenu("Open",					102, FileMenu)
CreateMenu("Save",					103, FileMenu)
CreateMenu("", 						000, FileMenu)
CreateMenu("Exit", 					105, FileMenu)
CreateMenu("Copy",					201, EditMenu)
CreateMenu("Paste",					202, EditMenu)
CreateMenu("Tool 1",				301, ToolMenu)
CreateMenu("Tool 2",				302, ToolMenu)
CreateMenu("Tool 3",				303, ToolMenu)
CreateMenu("Tool 4",				304, ToolMenu)
UpdateWindowMenu win


AddHook EmitEventHook,myhook
While True
WaitEvent
Wend

' ___________________________________________________

Function myhook:Object(id%,data:Object,context:Object)
	Local event:TEvent
	event=TEvent(data)
	
	Select event.id
		Case EVENT_WINDOWCLOSE , EVENT_APPTERMINATE
			End
		Case EVENT_MENUACTION
			Notify "Drag me around the canvas"
		Case EVENT_GADGETPAINT
			DrawCanvas
	End Select
End Function

' ___________________________________________________

Function DrawCanvas()
	SetGraphics CanvasGraphics(can)
	SetViewport 0,0,GraphicsWidth(),GraphicsHeight()
	Cls
	DrawLine 0,0,can.width,can.height
	DrawLine can.width,0,0,can.height
	Flip
End Function