Non-MaxGUI Resizable window?
BlitzMax Forums/BlitzMax Beginners Area/Non-MaxGUI Resizable window?
| ||
| I tried googling this forum, and I found a few responses but couldn't understand how this is done. I want to know how I'd do this from scratch, anyone know of a tutorial? Do I "Include" the win32 API or something? Can blitzmax import and read raw c++ cpp and headers files or is there a guide to importing regular c++ libs for use in blitzmax maybe? anyway, MaxGUI is nice and whatever, but I dont know if I could figure them out. Graphics(params) seems very simple compared to working inside TGadgets which can become windows..... or 10 other things.. but im confused, do all TGadgets work inside one renderer element or what/ does it work off a heirchy of Gadgets, such as the first canvas TGadget or first TGadget which returns a canvas becomes the master rendering element that parents all the other child TGadget elements? anyway my original questions is how can I have a simple resizable window without using MAxGUI since I read its possible but didnt understand the responses. |
| ||
| Here is a minimal solution with MaxGUI: This sample has only one window and inside a canvas, which can be used very simple: SuperStrict
Import MaxGUI.Drivers
Global Window:TGadget=CreateWindow("TEST",100,100,400,400)
Global Canvas:Tgadget=CreateCanvas(0,0,1920,1080,Window)
Global MausHit%, MausX%, MausY%
CreateTimer 10
While WaitEvent()
Select EventID()
Case EVENT_KEYDOWN
Print "KKeydown" + EventData()
'Case EVENT_KEYUP
Case EVENT_TIMERTICK
MainLoop
Case EVENT_GADGETPAINT
MainLoop
Case EVENT_WINDOWCLOSE
QuitMe
Case EVENT_APPTERMINATE
QuitMe
Case EVENT_MENUACTION
RedrawGadget Canvas
'Case EVENT_GADGETACTION
Case EVENT_MOUSEDOWN
MausHit=1
Case EVENT_MOUSEUP
MausHit=0
Case EVENT_MOUSEMOVE
MausX=EventX()
MausY=EventY()
'Case EVENT_MOUSELEAVE
Case EVENT_WINDOWSIZE
ResizeMe
Default
Print "EVENT= " + EventID()
End Select
Wend
Function MainLoop()
SetGraphics CanvasGraphics(Canvas)
SetAlpha 1
SetColor 255,255,255
SetScale 1,1
Cls
'**** your code here: **********************************************************
For Local i%=0 To 100
DrawOval Rand(0,GadgetWidth(Window)), Rand(0,GadgetHeight(Window)),5,5
Next
SetColor 255,0,0
If MausHit=1
Print "Maus " + MausX +" " + MausY
DrawOval MausX-15,MausY-15,30,30
EndIf
'*********************************************************
Flip 0
End Function
Function QuitMe()
FreeGadget Canvas
End
End Function
Function ResizeMe()
SetGadgetLayout Canvas , 1,1,1,1
SetGadgetShape Canvas, 0 , 0 , GadgetWidth(Window) , GadgetHeight(Window)
RedrawGadget Canvas
End Function
Put your drawing code between CLS and FLIP like your are used to do. The DEFAULT section helps to to identify unkonwn events |
| ||
| The TGadget type is extended by each of the MaxGUI "drivers" (which are modules that contain platform-specific code), and these extended gadgets represent actual gadgets of the native UI system (on Windows I think it's based on Kernel32, User32 and GDI32). The gadgets that your MaxGUI application uses are always native, wrapped in that TGadget abstraction. Without using MaxGUI, to get a resizable window you would use an Extern "win32" block to get the system functions necessary to create those UI objects, which is the same that MaxGUI does. So you should use MaxGUI because it'll save you work. But you can "hack" into it to get the behaviour you want: the specialised TWindowsGadget type has a hWnd field, for example, that you can obtain with QueryGadget() and use with native functions. |
| ||
| On using external libraries, take a look at how other modules are doing it. They Import the source files and use Extern: https://github.com/maxmods/bah.mod/blob/master/cairo.mod/externs.bmx You need MinGW configured properly to be able to compile external source files. |