1

I'm Using a Wrapper Library in GMS2 That was made back in GM6 Days (gamemaker) Someone was able to wrap majority of the win32API to use in GM6-8. There is only 1 odd instance in where the WinAPI system seems to mess up when drawing the controls to the Main Application Window.

The desired goal is to draw an image to an Child window and draw a grid defining it's splitting according to the user input EX: 16x16 and having the user select squares VIA Mouse Click + Dragging over the boxes.

Unfortunately I have little to no experience in win32API so i'm a bit lost as to where to start. Looking over the documentation it looks like he left majority of the script names of the DLL to mimic the format of that when calling in C++ or C (just my assumptions).

From His Documentation he has things like "Drawing System" Which Contains things like "Move Item","Add Line","Add Graphic Buffer" etc... and then other Graphic Buffer functions. But then theres the "Draw" functions which has things like "Draw Fill Rect , DrawSelectObj" etc... he doesn't really provide examples so i'm unsure as to how to use these things together to get my desired results. What is the difference between a drawing system and a draw function? Do I have to use them in conjunction, along with the Graphics Buffer?

Can Someone point in the right direction of the necessary steps to get it done? An Example without code and just the function equivalent will suffice, I just need to know out of which functions to use and then later bind it to the Child Window.

An Example Code from his demo is something like this

GbGradient2 = API_GB_Create (105,105); //Graphics Buffer
DcGradient2 = API_GB_GetDC (GbGradient2); 
API_Draw_Gradient (DcGradient2,0,0,105,105,0,c_yellow,c_lime);
BrGradient2 = API_Draw_CreatePatternBrush (API_GB_GetBitmap (GbGradient2));
API_Draw_Gradient (DcGradient2,0,0,105,105,0,c_red,65535);
BrGradient3 = API_Draw_CreatePatternBrush (API_GB_GetBitmap (GbGradient2));

hRectangle = API_DS_AddRectangle (2,5,5,105,105); // Adds a rectangle(Drawing System)
hEllipse = API_DS_AddEllipse (2,5,5,105,105);
hNoPen = API_Draw_CreatePen (PS_NULL,0,0);
API_DS_SetItemBrush (hRectangle,BrGradient2); // Sets the brush
API_DS_SetItemBrush (hEllipse,BrGradient3);
API_DS_SetItemPen (hRectangle,hNoPen); // Sets the pen
API_DS_SetItemPen (hEllipse,hNoPen);
API_Draw_Gradient  (GbGradient2,0,0,16,16,0,c_yellow,c_lime);

Lookin at it a little more it looks like the draw functions are linked to GDI somehow.

  • You can't draw on a window that isn't yours. That's not how the system works. What you probably need to do is create a transparent overlay window and draw to that (read up on layered windows). – David Heffernan Oct 27 '20 at 15:29
  • What do you mean "Thats not yours" When you create a new Window via winapi , is that not yours? – DaRagingDemon Oct 27 '20 at 21:21
  • You said, "an external window" – David Heffernan Oct 27 '20 at 21:40
  • @DavidHeffernan sorry for the confusion. I updated my post with the correct wording. I meant that I want to draw everything on the Child Window. Is that Still possible? – DaRagingDemon Oct 27 '20 at 21:59
  • 1
    If you want to draw on a window in your process, add code in the window procedure for the WM_PAINT message. I wonder if you have much experience of Win32 programming. This is pretty routine stuff that you learn fairly early on. – David Heffernan Oct 27 '20 at 23:44

1 Answers1

0

since GMS2 is a cross platform tool , its windows-only functionality gas been removed. you can make a nice GUI for that porpose by using GMS2 objects , as you have a little Xp about Win32 API,this will be easier than that big stuffy coding

here are some tips ,

  • creating a window object with a rectangle sprite
  • creating ui objects at the create event of above object
  • adding some code to the global mouse event