Post by Walt Decker on Mar 27, 2023 18:00:30 GMT -5
While looking through some of my old apps I found this little tidbit in my Civilization III clone directory from about 20 years ago. The attached zip just has eight supporting bitmaps.
I wanted to use the LB instruction LOADBMP but a system error cropped up stating that 2786 was out of the collection range, so I switched to API.
Anyway, I hope someone can have a little fun with this.
CKB_IMAGES.ZIP (16.16 KB)
'
OPEN "User32.dll" FOR DLL AS #USER
MainHndl = 0
RetVal = 0
RetVal = FN.WINMAIN()
MainHndl = FN.GetHndl("#WINMAIN")
RetVal = FN.TOOLWIN(MainHndl)
WAIT
'---------------------------------------------
'---------------------------------------------
FUNCTION FN.WINMAIN()
Ux = 50
Uy = 50
Bx = 300
By = 500
Ux = FN.LbWinPos(Ux, Uy)
Bx = FN.LbWinSize(Bx, By)
OPEN "TEST" FOR WINDOW AS #WINMAIN
PRINT #WINMAIN, "TRAPCLOSE CLOSE.WINMAIN"
END FUNCTION
'-------------------------------------------
'-------------------------------------------
SUB CLOSE.WINMAIN MainHndl$
CLOSE #TOOLS
CLOSE #USER
CLOSE #MainHndl$
END
END SUB
'-------------------------------------------
'-------------------------------------------
SUB BTN.BMP BtnHndl$
END SUB
'-------------------------------------------
'-------------------------------------------
FUNCTION FN.TOOLWIN(ParentHndl)
DATA "ARROW.BMP"
DATA "GRASSLND.BMP"
DATA "PLAINS.BMP"
DATA "DESERT.BMP"
DATA "TUNDRA.BMP"
DATA "COAST.BMP"
DATA "ICE.BMP"
DATA "OCEAN.BMP"
WS.POPUP = HEXDEC("&H80000000")
WS.CHILD = HEXDEC("&H40000000")
WS.MINIMIZE = HEXDEC("&H20000000")
WS.VISIBLE = HEXDEC("&H10000000")
WS.DISABLED = HEXDEC("&H08000000")
WS.CLIPSIBLINGS = HEXDEC("&H04000000")
WS.CLIPCHILDREN = HEXDEC("&H02000000")
WS.MAXIMIZE = HEXDEC("&H01000000")
WS.CAPTION = HEXDEC("&H00C00000")
WS.BORDER = HEXDEC("&H00800000")
WS.DLGFRAME = HEXDEC("&H00400000")
WS.VSCROLL = HEXDEC("&H00200000")
WS.HSCROLL = HEXDEC("&H00100000")
WS.SYSMENU = HEXDEC("&H00080000")
WS.MINIMIZEBOX = HEXDEC("&H00020000")
WS.MAXIMIZEBOX = HEXDEC("&H00010000")
WS.THICKFRAME = HEXDEC("&H00040000")
DS.ABSALIGN = HEXDEC("&H01")
WS.TABSTOP = HEXDEC("&H00010000")
BS.CHECKBOX = HEXDEC("&H00000002")
BS.BITMAP = HEXDEC("&H00000080")
BS.NOTIFY = HEXDEC("&H00004000")
BS.PUSHLIKE = HEXDEC("&H00001000")
WS.EX.TOOLWINDOW = HEXDEC("&H00000080")
WS.EX.CONTROLPARENT = HEXDEC("&H00010000")
WS.EX.CLIENTEDGE = HEXDEC("&H00000200")
WS.EX.DLGMODALFRAME = HEXDEC("&H00000001")
TOOL.STYLE = WS.POPUP OR WS.CAPTION OR WS.CLIPCHILDREN OR WS.CLIPSIBLINGS OR _
DS.ABSALIGN 'WS.SYSMENU OR
BTN.STYLE = WS.VISIBLE OR WS.CHILD OR BS.PUSHLIKE OR _
WS.TABSTOP OR BS.NOTIFY OR BS.CHECKBOX OR BS.BITMAP
'GWL.STYLE = -16
'GWL.EXSTYLE = -20
'GWL.ID = -12
'GWL.WNDPROC = -4
'GWL.HINSTANCE = -6
'GWL.HWNDPARENT = -8
LR.DEFAULTCOLOR = 00000000
LR.LOADFROMFILE = HEXDEC("&H00000010")
LR.LOAD = LR.LOADFROMFILE OR LR.DEFABTN.BMPTCOLOR
IMAGE.BITMAP = 0
BM.SETIMAGE = HEXDEC("&H00F7")
ToolHndl = 0
ImageHndl = 0
Ux = 0
Uy = 0
Xwide = 0
Yhigh = 0
RetVal = 0
I = 0
Tmp$ = ""
StrIn$ = ""
STYLEBITS #TOOLS.CKB1, BTN.STYLE, 0, WS.EX.DLGMODALFRAME, 0
STYLEBITS #TOOLS.CKB2, BTN.STYLE, 0, WS.EX.DLGMODALFRAME, 0
STYLEBITS #TOOLS.CKB3, BTN.STYLE, 0, WS.EX.DLGMODALFRAME, 0
STYLEBITS #TOOLS.CKB4, BTN.STYLE, 0, WS.EX.DLGMODALFRAME, 0
STYLEBITS #TOOLS.CKB5, BTN.STYLE, 0, WS.EX.DLGMODALFRAME, 0
STYLEBITS #TOOLS.CKB6, BTN.STYLE, 0, WS.EX.DLGMODALFRAME, 0
STYLEBITS #TOOLS.CKB7, BTN.STYLE, 0, WS.EX.DLGMODALFRAME, 0
STYLEBITS #TOOLS.CKB8, BTN.STYLE, 0, WS.EX.DLGMODALFRAME, 0
CHECKBOX #TOOLS.CKB1, "1", BTN.BMP, BTN.BMP, 5, 5, 38, 38
CHECKBOX #TOOLS.CKB2, "2", BTN.BMP, BTN.BMP, 5, 46, 38, 38
CHECKBOX #TOOLS.CKB3, "3", BTN.BMP, BTN.BMP, 5, 87, 38, 38
CHECKBOX #TOOLS.CKB4, "4", BTN.BMP, BTN.BMP, 5, 128, 38, 38
CHECKBOX #TOOLS.CKB5, "5", BTN.BMP, BTN.BMP, 5, 169, 38, 38
CHECKBOX #TOOLS.CKB6, "6", BTN.BMP, BTN.BMP, 5, 210, 38, 38
CHECKBOX #TOOLS.CKB7, "7", BTN.BMP, BTN.BMP, 5, 251, 38, 38
CHECKBOX #TOOLS.CKB8, "8", BTN.BMP, BTN.BMP, 5, 292, 38, 38
RetVal = FN.ClientSize(ParentHndl, Xwide, Yhigh)
RetVal = FN.MapPoints(ParentHndl, 0, Ux, Uy, 0, 0)
RetVal = FN.LbWinPos(Ux, Uy)
RetVal = FN.LbWinSize(60, 38 * 8 + 30 + 9 * 3)
STYLEBITS #TOOLS, TOOL.STYLE, WS.SYSMENU, WS.EX.TOOLWINDOW OR _
WS.EX.CONTROLPARENT, 0
OPEN "TOOLS" FOR DIALOG AS #TOOLS
ToolHndl = FN.GetHndl("#TOOLS")
RetVal = FN.MoveWindow(ToolHndl, Ux, Uy, 60, 38 * 8 + 30 + 9 * 3)
FOR I = 1 TO 8
Tmp$ = "#TOOLS.CKB" + STR$(I)
ToolHndl = FN.GetHndl(Tmp$)
READ StrIn$
CALLDLL #USER, "LoadImageA", 0 AS LONG, StrIn$ AS PTR, IMAGE.BITMAP AS LONG, _
0 AS LONG, 0 AS LONG, LR.LOAD AS ULONG, _
ImageHndl AS ULONG
CALLDLL #USER, "SendMessageA", ToolHndl AS ULONG, BM.SETIMAGE AS ULONG, _
IMAGE.BITMAP AS ULONG, ImageHndl AS ULONG, RetVal AS VOID
NEXT I
PRINT #TOOLS.CKB1, "SETFOCUS"
PRINT #TOOLS.CKB1, "SET"
END FUNCTION
'-------------------------------------------
'-------------------------------------------
FUNCTION FN.LbWinPos(BTN.BMPx, BTN.BMPy)
UpperLeftX = Ux
UpperLeftY = Uy
END FUNCTION
'-------------------------------------------
'-------------------------------------------
FUNCTION FN.LbWinSize(Blx, Bly)
WindowWidth = Blx
WindowHeight = Bly
END FUNCTION
'-------------------------------------------
'-------------------------------------------
FUNCTION FN.CheckTag$(Tag$)
IF LEFT$(Tag$, 1) <> "#" THEN Tag$ = "#" + Tag$
FN.CheckTag$ = Tag$
END FUNCTION
'-------------------------------------------
'-------------------------------------------
FUNCTION FN.GetHndl(Hndl$)
ObjHndl = 0
Hndl$ = FN.CheckTag$(Hndl$)
ObjHndl = HWND(#Hndl$)
FN.GetHndl = ObjHndl
END FUNCTION
'-------------------------------------------
'-------------------------------------------
FUNCTION FN.ClientSize(Hndl, BYREF Bx, BYREF By)
STRUCT tRect, _
Ux AS LONG, _
Uy AS LONG, _
Bx AS LONG, _
By AS LONG
RetVal = 0
CALLDLL #USER, "GetClientRect", Hndl AS ULONG, tRect AS STRUCT, RetVal AS VOID
Bx = tRect.Bx.struct
By = tRect.By.struct
END FUNCTION
'-------------------------------------------
'-------------------------------------------
FUNCTION FN.MapPoints(PntFrom, PntTo, BYREF X, BYREF Y, BYREF X1, BYREF Y1)
STRUCT tRect, _
Ux AS LONG, _
Uy AS LONG, _
Bx AS LONG, _
By AS LONG
tRect.Ux.struct = X
tRect.Uy.struct = Y
tRect.Bx.struct = X1
tRect.By.struct = Y1
RetVal = 0
CALLDLL #USER, "MapWindowPoints", PntFrom AS ULONG, PntTo AS ULONG, _
tRect AS STRUCT, 2 AS LONG, RetVal AS VOID
X = tRect.Ux.struct
Y = tRect.Uy.struct
X1 = tRect.Bx.struct
Y1 = tRect.By.struct
END FUNCTION
'-------------------------------------------
'-------------------------------------------
FUNCTION FN.MoveWindow(Hndl, Ulx, Uly, Xwide, Yhigh)
RetVal = 0
CALLDLL #USER, "MoveWindow", Hndl AS ULONG, Ulx AS LONG, Uly AS LONG, _
Xwide AS LONG, Yhigh AS LONG, 1 AS LONG, RetVal AS VOID
END FUNCTION
'-------------------------------------------
'-------------------------------------------
'