Code archives/Graphics/MaxGUI: Window positioning/resizing with a canvas
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
The user can position the window by clicking in the dark gray area and resize it by clicking in the bright gray area. | |||||
Strict Framework brl.blitz Import brl.d3d7max2d Import brl.glmax2d Import brl.win32maxgui Import brl.fltkmaxgui Import brl.cocoamaxgui Global Stop Global MX , MY , MD Global Window:TGadget = CreateWindow ( "TestWin" , 400 , 400 , 400 , 400 , Desktop ( ) , 0 ) Global Canvas:TGadget = CreateCanvas ( 0 , 0 , ClientWidth ( Window ) , ClientHeight ( Window ) , Window ) SetGadgetLayout Canvas , 1 , 1 , 1 , 1 AddHook EmitEventHook , Hook While Not Stop WaitSystem Wend Function Hook:Object ( ID , Data:Object , Context:Object ) Local Event:TEvent = TEvent ( Data ) Select Event.source Case Window If Event.id = EVENT_WINDOWCLOSE Stop = True EndIf Case Canvas If Event.id = EVENT_GADGETPAINT SetGraphics CanvasGraphics ( Canvas ) SetViewport 0 , 0 , ClientWidth ( Canvas ) , ClientHeight ( Canvas ) SetClsColor 200 , 200 , 200 Cls SetViewport 10 , 30 , ClientWidth ( Canvas ) - 20 , ClientHeight ( Canvas ) - 40 SetClsColor 100 , 100 , 100 Cls SetViewport 10 , 10 , ClientWidth ( Canvas ) - 20 , 20 SetClsColor 0 , 0 , 255 Cls SetColor 255 , 255 , 255 DrawText "Window Title" , 12 , 12 SetColor 200 , 200 , 200 DrawRect ClientWidth ( Canvas ) - 28 , 12 , 16 , 16 SetColor 0 , 0 , 0 DrawLine ClientWidth ( Canvas ) - 28 , 12 , ClientWidth ( Canvas ) - 13 , 27 DrawLine ClientWidth ( Canvas ) - 13 , 12 , ClientWidth ( Canvas ) - 28 , 27 Flip EndIf If Event.id = EVENT_MOUSEDOWN And Event.data = 1 If Event.x >= ClientWidth ( Canvas ) - 28 And Event.x < ClientWidth ( Canvas ) - 12 And Event.y >= 12 And Event.y < 28 Stop = True Else MX = Event.x MY = Event.y MD = ( MY > 10 ) + ( MY >= ClientHeight ( Canvas ) - 10 ) MD :* 3 MD :+ ( MX > 10 ) + ( MX >= ClientWidth ( Canvas ) - 10 ) MD :+ 1 EndIf EndIf If Event.id = EVENT_MOUSEMOVE And MD Local DX = Event.x - MX Local DY = Event.y - MY Local X = GadgetX ( Window ) Local Y = GadgetY ( Window ) Local W = GadgetWidth ( Window ) Local H = GadgetHeight ( Window ) Select MD Case 1 ; X :+ DX ; W :- DX ; Y :+ DY ; H :- DY Case 2 ; Y :+ DY ; H :- DY Case 3 ; W :+ DX ; MX :+ DX ; Y :+ DY ; H :- DY Case 4 ; X :+ DX ; W :- DX Case 5 ; X :+ DX ; Y :+ DY Case 6 ; W :+ DX ; MX :+ DX Case 7 ; X :+ DX ; W :- DX ; H :+ DY ; MY :+ DY Case 8 ; H :+ DY ; MY :+ DY Case 9 ; W :+ DX ; MX :+ DX ; H :+ DY ; MY :+ DY EndSelect SetGadgetShape Window , X , Y , W , H EndIf If Event.id = EVENT_MOUSEUP And Event.data = 1 MD = 0 EndIf EndSelect Return Data EndFunction |
Comments
None.
Code Archives Forum