Windows Interface for Blitz progs

Blitz3D Forums/Blitz3D Programming/Windows Interface for Blitz progs

JoshK(Posted 2004) [#1]
Okay, here ya go:

(You DO get event feedback, in case you are wondering.)

If you don't need 3D, or only need simple 3D you can do with OpenGL, I would definitely choose BlitzPlus over this method.



PureBasic DLL source:
hook.l
oldProc.l
mainHWnd.l

Global *MainHWnd
Global svar.s

Structure message
hWnd.l
messagename.l
wParam.l
lParam.l
EndStructure

Structure msgque
*next.msgque
*previous.msgque
hWnd.l
message.l
wParam.l
lParam.l
EndStructure

DefType.msgque *que

Declare WinProc(hWnd,Mesg,wParam,lParam)
Declare AddMessage(messname,hWnd,wParam,lParam)

;General
;=============================================================
;Procedure KeyboardHookProc(code,wParam,*lParam.MSG)
;If *lParam\message=#WM_KEYDOWN
;  TranslateMessage_(*lParam.MSG)
;  DispatchMessage_(*lParam.MSG)
;  EndIf
;EndProcedure

Procedure SubclassProc(hWnd,Mesg,wParam,lParam)
  Shared oldProc,MainHWnd
  Select Mesg
  Case #wm_command
    mess=1
  Case #wm_close
    SetWindowLong_(MainHWnd,#GWL_WNDPROC,oldProc)
  Case #WM_SIZE
    rect.rect
    GetWindowRect_(hWND,rect)
    w=rect\right-rect\left
    h=rect\bottom-rect\top
    If w<MINWINDOWWIDTH
      resize=1
      w=MINWINDOWWIDTH
      EndIf
    If h<MINWINDOWHEIGHT
      resize=1
      h=MINWINDOWHEIGHT
      EndIf
    If resize=1
      MoveWindow_(hWND,rect\left,rect\top,w,h,1)
      EndIf
;    UpdateStatusBar(0)
  EndSelect
  AddMessage(mess,hWnd,wParam,lParam)
  ProcedureReturn CallWindowProc_(oldProc,hWnd,Mesg,wParam,lParam)
EndProcedure

ProcedureDLL InitWindow(*hWND)
Shared MainHWnd,oldProc
oldProc=SetWindowLong_(*hWnd,#GWL_WNDPROC,@SubclassProc())
NewList filo.msgque()
MainHWnd=*hWnd
EndProcedure

Procedure WinProc(hWnd,Mesg,wParam,lParam)
  Shared hook
  Select Mesg
    Case #wm_command
      mess=1
    Case #wm_close
      UnhookWindowsHookEx_(hook)
      ;DestroyWindow_(hWnd); don't do this in the DLL.
      mess=2
    EndSelect
  AddMessage(mess,hWnd,wParam,lParam)
  ProcedureReturn DefWindowProc_(hWnd,Mesg,wParam,lParam)
EndProcedure

ProcedureDLL.l pbCheckStatus(*a.message)
Shared *que
*que=LastElement(filo())
If *que<>0
  *a\hWnd=*que\hWnd
  *a\messagename=*que\message
  *a\wParam=*que\wParam
  *a\lParam=*que\lParam
  DeleteElement(filo())
  Else
  *a\hWnd=0
  *a\messagename=0
  *a\wParam=0
  *a\lParam=0
  EndIf
ProcedureReturn *a\messagename
EndProcedure

Procedure AddMessage(messname,hWnd,wParam,lParam)
  Shared *que
  If messname>0
    ResetList(filo())
    *que=AddElement(filo())
    If *que<>0
      *que\hWnd=hWnd
      *que\message=messname
      *que\wParam=wParam
      *que\lParam=lParam
    EndIf
  EndIf
EndProcedure

;=============================================================
;Window
ProcedureDLL.l pbOpenWindow(num,x,y,InnerWidth,InnerHeight,Flags,Title$,ParentWindowID)
ProcedureReturn pbOpenWindow(num,x,y,InnerWidth,InnerHeight,Flags,Title$,ParentWindowID)
EndProcedure

Procedure pbUseWindow(windowid)
UseWindow(windowid)
EndProcedure

;=============================================================
;Toolbar
ProcedureDLL.l pbCreateToolBar(num,*hWND)
ProcedureReturn CreateToolBar(num,*hWND)
EndProcedure

ProcedureDLL.l pbToolBarSeparator()
ProcedureReturn ToolBarSeparator()
EndProcedure

ProcedureDLL.l pbToolBarStandardButton(num,icon) 
ProcedureReturn ToolBarStandardButton(num,icon)
EndProcedure

ProcedureDLL.l pbToolBarImageButton(num,icon) 
ProcedureReturn ToolBarImageButton(num,icon)
EndProcedure

ProcedureDLL pbAddTBTextButton(num,text$,flags)
pbAddTBtextButton(num,text$,flags)
EndProcedure

ProcedureDLL pbToolBarToolTip(buttonid,text$)
ToolBarToolTip(buttonid,text$)
EndProcedure

;=============================================================
;Statusbar
ProcedureDLL.l pbCreateStatusBar(num,*hWND)
ProcedureReturn CreateStatusBar(num,*hWND)
EndProcedure

ProcedureDLL.l pbAddStatusBarField(width)
ProcedureReturn AddStatusBarField(width)
EndProcedure

ProcedureDLL pbStatusBarText(text$,field)
ProcedureReturn StatusBarText(0,field,text$)
EndProcedure

;=============================================================
;Menu
ProcedureDLL.l pbCreateMenu(num,*hWnd)
ProcedureReturn CreateMenu(num,*hWnd)
EndProcedure

ProcedureDLL pbMenuTitle(text$)
ProcedureReturn MenuTitle(text$)
EndProcedure

ProcedureDLL.l pbMenuBar()
ProcedureReturn MenuBar()
EndProcedure

ProcedureDLL.l pbMenuItem(num,text$)
ProcedureReturn MenuItem(num,text$)
EndProcedure

ProcedureDLL pbOpenSubMenu(text$)
ProcedureReturn OpenSubMenu(text$)
EndProcedure

ProcedureDLL pbCloseSubMenu()
ProcedureReturn CloseSubMenu()
EndProcedure

ProcedureDLL pbDisplayPopupMenu(num,hWnd)
DisplayPopupMenu(num,hWnd)
EndProcedure

ProcedureDLL pbSetMenuItemState(menu,item,state)
ProcedureReturn SetMenuItemState(menu,item,state)
EndProcedure

ProcedureDLL.l pbGetMenuItemState(menu,item)
ProcedureReturn GetMenuItemState(menu,item)
EndProcedure

ProcedureDLL.l pbMenuHeight()
ProcedureReturn MenuHeight()
EndProcedure

;=============================================================
;Toolbar Pro
;ProcedureDLL.l pbCreateTB(num,*hWnd,w,h,Flags)
;ProcedureReturn CreateTB(num,*hWnd,w,h)
;EndProcedure

;ProcedureDLL.l pbAddTBbutton(num,image,flags)
;ProcedureReturn AddTBbutton(num,image,$2)
;EndProcedure

;ProcedureDLL pbUpdateTB(tbid)
;UpdateTB(tbid)
;EndProcedure

;=============================================================
;Requesters
ProcedureDLL.l pbMessageRequester(Title$,Text$,Flags) 
ProcedureReturn MessageRequester(Title$,Text$,Flags) 
EndProcedure

ProcedureDLL.l pbSaveFileRequester(Title$,DefaultFile$,Pattern$,PatternPosition) 
svar.s=SaveFileRequester(Title$,DefaultFile$,Pattern$,PatternPosition) 
ProcedureReturn @svar.s
EndProcedure

ProcedureDLL.l pbOpenFileRequester(Title$,DefaultFile$,Pattern$,PatternPosition) 
svar.s=OpenFileRequester(Title$,DefaultFile$,Pattern$,PatternPosition) 
ProcedureReturn @svar.s
EndProcedure

ProcedureDLL.l pbSelectedFilePattern() 
ProcedureReturn SelectedFilePattern()
EndProcedure

;=============================================================
;Image
ProcedureDLL.l pbLoadImage(num,file$)
ProcedureReturn LoadImage(num,file$)
EndProcedure

ProcedureDLL.l pbUseImage(num)
ProcedureReturn UseImage(num)
EndProcedure

ProcedureDLL.l pbFreeImage(num)
ProcedureReturn FreeImage(num)
EndProcedure

;=============================================================
;Gadget
ProcedureDLL.l pbCreateGadgetList(*hWnd)
ProcedureReturn CreateGadgetList(*hWnd)
EndProcedure

ProcedureDLL pbUseGadgetList(*hWND)
UseGadgetList(*hWND)
EndProcedure

ProcedureDLL.l pbCloseGadgetList()
ProcedureReturn CloseGadgetList()
EndProcedure

ProcedureDLL pbResizeGadget(num,x,y,Width,Height) 
ResizeGadget(num,x,y,Width,Height) 
EndProcedure

ProcedureDLL.l pbListIconGadget(num,x,y,Width,Height,Title$,TitleWidth,Flags)
ProcedureReturn ListIconGadget(num,x,y,Width,Height,Title$,TitleWidth,Flags)
EndProcedure 

ProcedureDLL pbAddGadgetItem(gadgetid,position,text$,imageid)
If imageid=-1
  ProcedureReturn AddGadgetItem(gadgetid,position,text$) 
  Else
  ProcedureReturn AddGadgetItem(gadgetid,position,text$,imageid) 
  EndIf
EndProcedure

ProcedureDLL.l pbGetGadgetState(gadgetid) 
ProcedureReturn GetGadgetState(gadgetid)
EndProcedure

ProcedureDLL.l pbComboBoxGadget(num,x,y,Width,Height,Flags)
ProcedureReturn ComboBoxGadget(num,x,y,Width,Height,Flags)
EndProcedure

ProcedureDLL pbSetGadgetState(gadgetid,state)
SetGadgetState(gadgetid,state)
EndProcedure

ProcedureDLL pbRemoveGadgetItem(gadgetid,item)
RemoveGadgetItem(gadgetid,item)
EndProcedure

ProcedureDLL.l pbGetGadgetItemState(gadgetid,item)
ProcedureReturn GetGadgetItemState(gadgetid,item)
EndProcedure

ProcedureDLL pbSetGadgetItemState(gadgetid,item,state)
SetGadgetItemState(gadgetid,item,state)
EndProcedure

ProcedureDLL pbClearGadgetItemList(gadgetid) 
ClearGadgetItemList(gadgetid)
EndProcedure

;=============================================================
;Tree Gadget
ProcedureDLL.l pbTreeGadget(num,x,y,width,height,flags) 
ProcedureReturn TreeGadget(num,x,y,width,height,flags) 
EndProcedure

ProcedureDLL.l pbOpenTreeGadgetNode(gadgetid,position)
If position=-1
  OpenTreeGadgetNode(gadgetid)
  Else
  OpenTreeGadgetNode(gadgetid,position)
  EndIf
EndProcedure

ProcedureDLL.l pbCloseTreeGadgetNode(gadgetid,position)
If position=-1
  CloseTreeGadgetNode(gadgetid)
  Else
  CloseTreeGadgetNode(gadgetid,position)
  EndIf
EndProcedure

ProcedureDLL pbGadgetID(num)

EndProcedure

ProcedureDLL pbPanelGadget(num,x,y,w,h)
ProcedureReturn PanelGadget(num,x,y,w,h)
EndProcedure

ProcedureDLL.l pbContainerGadget(gadgetid,x,y,width,height,flags)
ProcedureReturn ContainerGadget(gadgetid,x,y,width,height,flags)
EndProcedure

ProcedureDLL.l pbFreeGadget(gadgetid)
ProcedureReturn FreeGadget(gadgetid)
EndProcedure

ProcedureDLL.l pbButtonImageGadget(num,x,y,w,h,image)
ProcedureReturn ButtonImageGadget(num,x,y,w,h,image)
EndProcedure

ProcedureDLL.l pbButtonGadget(num,x,y,w,h,title$,style)
ProcedureReturn ButtonGadget(num,x,y,w,h,title$,style)
EndProcedure

ProcedureDLL.l pbTextGadget(num,x,y,Width,Height,Text$,Flags) 
ProcedureReturn TextGadget(num,x,y,Width,Height,Text$,Flags) 
EndProcedure

ProcedureDLL.l pbStringGadget(num,x,y,w,h,content$,style)
ProcedureReturn StringGadget(num,x,y,w,h,content$,style)
EndProcedure

ProcedureDLL.l pbGetGadgetText(num,bank)
svar.s=GetGadgetText(num)
ProcedureReturn @svar
EndProcedure



JoshK(Posted 2004) [#2]
purebasic.decls file:
.lib "dlls\purebasic.dll"

;===================================================
;Event
pbCheckStatus%(buffer*)

;===================================================
;Window
InitWindow(hWND%)

;===================================================
;Requesters
pbMessageRequester%(Title$,Text$,Flags%)
pbOpenFileRequester$(Title$,DefaultFile$,Pattern$,PatternPosition)
pbSaveFileRequester$(Title$,DefaultFile$,Pattern$,PatternPosition)
pbSelectedPattern%()

;===================================================
;Toolbar
pbCreateToolBar%(num,hWND%)
pbToolBarSeparator%()
pbToolBarStandardButton%(num%,icon%) 
pbToolBarImageButton%(num%,icon%) 
pbToolBarToolTip(buttonid,text$)

;===================================================
;ToolbarPro
pbCreateTB%(num,hWnd,w,h,flags)
pbAddTBbutton%(num,image,flags)
pbUpdateTB(tbid)
pbAddTBTextButton(num,text$,flags)

;===================================================
;StatusBar
pbCreateStatusBar%(num%,hWND%)
pbAddStatusBarField%(width%)
pbStatusBarText%(text$,field%)

;===================================================
;Menu
pbCreateMenu%(num%,hWnd%)
pbMenuTitle%(text$)
pbMenuBar%()
pbMenuItem%(num%,text$)
pbOpenSubMenu%(text$)
pbCloseSubMenu%()
pbDisplayPopupMenu%(num%,hWnd)
pbMenuHeight%()
pbSetMenuItemState(menu,item,state)
pbGetMenuItemState%(menu,item)

;===================================================
;Image
pbLoadImage%(num%,file$)
pbUseImage(num%)
pbFreeImage(num%)

;===================================================
;Gadget
pbCreateGadgetList%(hWND%)
pbUseGadgetList(hWND%)
pbCloseGadgetList()
pbFreeGadget(num%)
pbResizeGadget(num%,x%,y%,width%,height%)
pbAddGadgetItem(gadgetid%,position%,text$,imageid%)
pbGetGadgetState%(gadgetid%)
pbSetGadgetState(gadgetid%,state%)
pbGetGadgetItemState%(gadgetid,item)
pbSetGadgetItemState(gadgetid,item,state)
pbRemoveGadgetItem(gadgetid,item)
pbClearGadgetItemList(gadgetid)

;Tree Gadget
pbTreeGadget%(num%,x%,y%,width%,height%,flags%)
pbOpenTreeGadgetNode(gadgetid%,position%) 
pbCloseTreeGadgetNode(gadgetid%,position%)

pbComboBoxGadget%(num,x,y,Width,Height,Flags)
pbTextGadget(num,x,y,Width,Height,Text$,Flags)
pbListIconGadget(num%,x%,y%,width%,height%,title$,titleWidth%,flags%)
pbPanelGadget%(num%,x%,y%,width%,height%)
pbContainerGadget%(gadgetid%,x%,y%,width%,height%,flags%)
pbButtonImageGadget%(num,x%,y%,width%,height%,image%)
pbButtonGadget%(num%,x%,y%,width%,height%,text$,style%)
pbStringGadget%(num%,x%,y%,width%,height%,text$,style%)
pbGetGadgetText%(num%,bank%)



JoshK(Posted 2004) [#3]
purebasic_const.bb constants file:
Const PB_3DArchive_FileSystem=0
Const PB_3DArchive_Zip=1
Const PB_Any=-1
Const PB_Button_Default=1
Const PB_Button_Left=256
Const PB_Button_MultiLine=8192
Const PB_Button_Right=512
Const PB_Button_Toggle=4099
Const PB_Camera_Orthographic=1
Const PB_Camera_Perspective=0
Const PB_Camera_Plot=2
Const PB_Camera_Textured=0
Const PB_Camera_Wireframe=1
Const PB_CheckBox_Center=768
Const PB_CheckBox_Right=512
Const PB_Clipboard_Image=2
Const PB_ClipboardImage=2
Const PB_ComboBox_Editable=2
Const PB_ComboBox_LowerCase=16384
Const PB_ComboBox_UpperCase=8192
Const PB_Container_BorderLess=0
Const PB_Container_Double=8
Const PB_Container_Flat=1
Const PB_Container_Raised=2
Const PB_Container_Single=4
Const PB_Date_Day=3
Const PB_Date_Hour=4
Const PB_Date_Minute=5
Const PB_Date_Month=1
Const PB_Date_Second=6
Const PB_Date_Week=2
Const PB_Date_Year=0
Const PB_Default=-1
Const PB_Engine3D_Average=3
Const PB_Engine3D_Current=0
Const PB_Engine3D_Maximum=1
Const PB_Engine3D_Minimum=2
Const PB_Engine3D_Reset=4
Const PB_Event_ActivateWindow=6
Const PB_Event_CloseWindow=16
Const PB_Event_Gadget=13100
Const PB_Event_Menu=13101
Const PB_Event_MoveWindow=3
Const PB_Event_Repaint=15
Const PB_Event_SizeWindow=5
Const PB_Event_SysTray=13102
Const PB_EventActivateWindow=6
Const PB_EventCloseWindow=16
Const PB_EventGadget=13100
Const PB_EventMenu=13101
Const PB_EventMoveWindow=3
Const PB_EventRepaint=15
Const PB_EventSizeWindow=5
Const PB_EventSysTray=13102
Const PB_EventType_Change=768
Const PB_EventType_CloseItem=65535
Const PB_EventType_Focus=256
Const PB_EventType_LeftClick=0
Const PB_EventType_LeftDoubleClick=2
Const PB_EventType_LostFocus=512
Const PB_EventType_ReturnKey=1281
Const PB_EventType_RightClick=1
Const PB_EventType_RightDoubleClick=3
Const PB_EventType_SizeItem=65534
Const PB_Explorer_Accessed=1163870800
Const PB_Explorer_Column_Accessed=2017812290
Const PB_Explorer_AlwaysShowSelection=16777216
Const PB_Explorer_Attributes=1163870800
Const PB_Explorer_Column_Attributes=2017812290
Const PB_Explorer_AutoSort=64
Const PB_Explorer_BorderLess=1048576
Const PB_Explorer_Created=1163870800
Const PB_Explorer_Column_Created=2017812290
Const PB_Explorer_Directory=2
Const PB_Explorer_DrivesOnly=128
Const PB_Explorer_Editable=256
Const PB_Explorer_File=1
Const PB_Explorer_FullRowSelect=33554432
Const PB_Explorer_GridLines=4194304
Const PB_Explorer_HeaderDragDrop=8388608
Const PB_Explorer_Modified=1163870800
Const PB_Explorer_Column_Modified=2017812290
Const PB_Explorer_MultiSelect=2097152
Const PB_Explorer_Name=1163870800
Const PB_Explorer_Column_Name=2017812290
Const PB_Explorer_NoButtons=134217728
Const PB_Explorer_NoDirectoryChange=8
Const PB_Explorer_NoDriveRequester=16
Const PB_Explorer_NoFiles=1
Const PB_Explorer_NoFolders=4
Const PB_Explorer_NoLines=67108864
Const PB_Explorer_NoMyDocuments=512
Const PB_Explorer_NoParentFolder=2
Const PB_Explorer_NoSort=32
Const PB_Explorer_Selected=4
Const PB_Explorer_Size=1163870800
Const PB_Explorer_Column_Size=2017812290
Const PB_Explorer_Type=1163870800
Const PB_Explorer_Column_Type=1766219586
Const PB_FileSystem_Archive=32
Const PB_FileSystem_Compressed=2048
Const PB_FileSystem_Force=2
Const PB_FileSystem_Hidden=2
Const PB_FileSystem_Normal=128
Const PB_FileSystem_ReadOnly=1
Const PB_FileSystem_Recursive=1
Const PB_FileSystem_System=4
Const PB_Font_Bold=256
Const PB_Font_Default=-1
Const PB_Font_HighQuality=16
Const PB_Font_Italic=512
Const PB_Font_StrikeOut=8
Const PB_Font_Underline=4
Const PB_FontRequester_Effects=256
Const PB_Frame3D_Double=1
Const PB_Frame3D_Flat=3
Const PB_Frame3D_Single=2
Const PB_Image_Border=512
Const PB_ImagePlugin_BMP=0
Const PB_ImagePlugin_JPEG=1195724874
Const PB_ImagePlugin_PNG=4673104
Const PB_Key_0=11
Const PB_Key_1=2
Const PB_Key_2=3
Const PB_Key_3=4
Const PB_Key_4=5
Const PB_Key_5=6
Const PB_Key_6=7
Const PB_Key_7=8
Const PB_Key_8=9
Const PB_Key_9=10
Const PB_Key_A=30
Const PB_Key_Add=78
Const PB_Key_All=-1
Const PB_Key_Apostrophe=40
Const PB_Key_B=48
Const PB_Key_Back=14
Const PB_Key_BackSlash=43
Const PB_Key_C=46
Const PB_Key_Capital=58
Const PB_Key_Comma=51
Const PB_Key_D=32
Const PB_Key_Decimal=83
Const PB_Key_Delete=211
Const PB_Key_Divide=181
Const PB_Key_Down=208
Const PB_Key_E=18
Const PB_Key_End=207
Const PB_Key_Equals=13
Const PB_Key_Escape=1
Const PB_Key_F=33
Const PB_Key_F1=59
Const PB_Key_F10=68
Const PB_Key_F11=87
Const PB_Key_F12=88
Const PB_Key_F2=60
Const PB_Key_F3=61
Const PB_Key_F4=62
Const PB_Key_F5=63
Const PB_Key_F6=64
Const PB_Key_F7=65
Const PB_Key_F8=66
Const PB_Key_F9=67
Const PB_Key_G=34
Const PB_Key_Grave=41
Const PB_Key_H=35
Const PB_Key_Home=199
Const PB_Key_I=23
Const PB_Key_Insert=210
Const PB_Key_J=36
Const PB_Key_K=37
Const PB_Key_L=38
Const PB_Key_Left=203
Const PB_Key_LeftAlt=56
Const PB_Key_LeftBracket=26
Const PB_Key_LeftControl=29
Const PB_Key_LeftShift=42
Const PB_Key_M=50
Const PB_Key_Minus=12
Const PB_Key_Multiply=55
Const PB_Key_N=49
Const PB_Key_NumLock=69
Const PB_Key_O=24
Const PB_Key_P=25
Const PB_Key_Pad0=82
Const PB_Key_Pad1=79
Const PB_Key_Pad2=80
Const PB_Key_Pad3=81
Const PB_Key_Pad4=75
Const PB_Key_Pad5=76
Const PB_Key_Pad6=77
Const PB_Key_Pad7=71
Const PB_Key_Pad8=72
Const PB_Key_Pad9=73
Const PB_Key_PadComma=179
Const PB_Key_PadEnter=156
Const PB_Key_PageDown=209
Const PB_Key_PageUp=201
Const PB_Key_Pause=197
Const PB_Key_Period=52
Const PB_Key_Q=16
Const PB_Key_R=19
Const PB_Key_Return=28
Const PB_Key_Right=205
Const PB_Key_RightAlt=184
Const PB_Key_RightBracket=27
Const PB_Key_RightControl=157
Const PB_Key_RightShift=54
Const PB_Key_S=31
Const PB_Key_Scroll=70
Const PB_Key_SemiColon=39
Const PB_Key_Slash=53
Const PB_Key_Space=57
Const PB_Key_Subtract=74
Const PB_Key_T=20
Const PB_Key_Tab=15
Const PB_Key_U=22
Const PB_Key_Up=200
Const PB_Key_V=47
Const PB_Key_W=17
Const PB_Key_X=45
Const PB_Key_Y=21
Const PB_Key_Z=44
Const PB_ListIcon_AlwaysShowSelection=8
Const PB_ListIcon_CheckBoxes=1
Const PB_ListIcon_Checked=2
Const PB_ListIcon_FullRowSelect=1073741824
Const PB_ListIcon_GridLines=65536
Const PB_ListIcon_HeaderDragDrop=268435456
Const PB_ListIcon_MultiSelect=4
Const PB_ListIcon_Selected=1
Const PB_Material_Add=1
Const PB_Material_AlphaBlend=3
Const PB_Material_Animated=1
Const PB_Material_Bilinear=1
Const PB_Material_Color=4
Const PB_Material_Fixed=0
Const PB_Material_Flat=0
Const PB_Material_Gouraud=1
Const PB_Material_Modulate=2
Const PB_Material_None=0
Const PB_Material_Phong=2
Const PB_Material_Replace=0
Const PB_Material_Trilinear=2
Const PB_MDI_Arrange=-6
Const PB_MDI_AutoSize=2
Const PB_MDI_BorderLess=1
Const PB_MDI_Cascade=-1
Const PB_MDI_Hide=8
Const PB_MDI_ItemHeight=2
Const PB_MDI_ItemWidth=1
Const PB_MDI_Maximize=2
Const PB_MDI_Minimize=4
Const PB_MDI_Next=-4
Const PB_MDI_Normal=1
Const PB_MDI_NoScrollBars=4
Const PB_MDI_Previous=-5
Const PB_MDI_Show=16
Const PB_MDI_SizedItem=1
Const PB_MDI_TileHorizontally=-3
Const PB_MDI_TileVertically=-2
Const PB_Mesh_Colors=4
Const PB_Mesh_Normals=3
Const PB_Mesh_Triangles=1
Const PB_Mesh_UVCoordinates=2
Const PB_Mesh_Vertices=0
Const PB_MessageRequester_Ok=0
Const PB_MessageRequester_YesNo=4
Const PB_MessageRequester_YesNoCancel=3
Const PB_Movie_Rendered=-1
Const PB_OnError_EAX=0
Const PB_OnError_EBP=16
Const PB_OnError_EBX=4
Const PB_OnError_ECX=8
Const PB_OnError_EDI=24
Const PB_OnError_EDX=12
Const PB_OnError_ESC=20
Const PB_OnError_ESP=36
Const PB_OnError_FFLags=32
Const PB_OnError_SegCS=28
Const PB_OnError_SegSS=40
Const PB_OS_AmigaOS=3
Const PB_OS_Linux=2
Const PB_OS_Windows=1
Const PB_OS_Windows_2000=50
Const PB_OS_Windows_95=10
Const PB_OS_Windows_98=30
Const PB_OS_Windows_Future=100
Const PB_OS_Windows_ME=40
Const PB_OS_Windows_NT3_51=5
Const PB_OS_Windows_NT_4=20
Const PB_OS_Windows_XP=60
Const PB_Particle_Box=1
Const PB_Particle_Point=0
Const PB_PixelFormat_15Bits=2
Const PB_PixelFormat_16Bits=3
Const PB_PixelFormat_24Bits_BGR=5
Const PB_PixelFormat_24Bits_RGB=4
Const PB_PixelFormat_32Bits_BGR=7
Const PB_PixelFormat_32Bits_RGB=6
Const PB_PixelFormat_8Bits=1
Const PB_ProcessPureBasicEvents=-522133279
Const PB_ProgressBar_Smooth=1
Const PB_ProgressBar_Vertical=4
Const PB_Requester_MultiSelection=1
Const PB_ScrollArea_BorderLess=8
Const PB_ScrollArea_Flat=1
Const PB_ScrollArea_InnerHeight=2
Const PB_ScrollArea_InnerWidth=1
Const PB_ScrollArea_Raised=2
Const PB_ScrollArea_Single=4
Const PB_ScrollBar_Vertical=1
Const PB_Shortcut_0=48
Const PB_Shortcut_1=49
Const PB_Shortcut_2=50
Const PB_Shortcut_3=51
Const PB_Shortcut_4=52
Const PB_Shortcut_5=53
Const PB_Shortcut_6=54
Const PB_Shortcut_7=55
Const PB_Shortcut_8=56
Const PB_Shortcut_9=57
Const PB_Shortcut_A=65
Const PB_Shortcut_Add=107
Const PB_Shortcut_All=-1
Const PB_Shortcut_Alt=262144
Const PB_Shortcut_Apps=93
Const PB_Shortcut_B=66
Const PB_Shortcut_Back=8
Const PB_Shortcut_C=67
Const PB_Shortcut_Capital=20
Const PB_Shortcut_Clear=12
Const PB_Shortcut_Control=131072
Const PB_Shortcut_D=68
Const PB_Shortcut_Decimal=110
Const PB_Shortcut_Delete=46
Const PB_Shortcut_Divide=111
Const PB_Shortcut_Down=40
Const PB_Shortcut_E=69
Const PB_Shortcut_End=35
Const PB_Shortcut_Escape=27
Const PB_Shortcut_Execute=43
Const PB_Shortcut_F=70
Const PB_Shortcut_F1=112
Const PB_Shortcut_F10=121
Const PB_Shortcut_F11=122
Const PB_Shortcut_F12=123
Const PB_Shortcut_F13=124
Const PB_Shortcut_F14=125
Const PB_Shortcut_F15=126
Const PB_Shortcut_F16=127
Const PB_Shortcut_F17=128
Const PB_Shortcut_F18=129
Const PB_Shortcut_F19=130
Const PB_Shortcut_F2=113
Const PB_Shortcut_F20=131
Const PB_Shortcut_F21=132
Const PB_Shortcut_F22=133
Const PB_Shortcut_F23=134
Const PB_Shortcut_F24=135
Const PB_Shortcut_F3=114
Const PB_Shortcut_F4=115
Const PB_Shortcut_F5=116
Const PB_Shortcut_F6=117
Const PB_Shortcut_F7=118
Const PB_Shortcut_F8=119
Const PB_Shortcut_F9=120
Const PB_Shortcut_G=71
Const PB_Shortcut_H=72
Const PB_Shortcut_Help=47
Const PB_Shortcut_Home=36
Const PB_Shortcut_I=73
Const PB_Shortcut_Insert=45
Const PB_Shortcut_J=74
Const PB_Shortcut_K=75
Const PB_Shortcut_L=76
Const PB_Shortcut_Left=37
Const PB_Shortcut_LeftWindows=91
Const PB_Shortcut_M=77
Const PB_Shortcut_Menu=18
Const PB_Shortcut_Multiply=106
Const PB_Shortcut_N=78
Const PB_Shortcut_Next=34
Const PB_Shortcut_Numlock=144
Const PB_Shortcut_O=79
Const PB_Shortcut_P=80
Const PB_Shortcut_Pad0=96
Const PB_Shortcut_Pad1=97
Const PB_Shortcut_Pad2=98
Const PB_Shortcut_Pad3=99
Const PB_Shortcut_Pad4=100
Const PB_Shortcut_Pad5=101
Const PB_Shortcut_Pad6=102
Const PB_Shortcut_Pad7=103
Const PB_Shortcut_Pad8=104
Const PB_Shortcut_Pad9=105
Const PB_Shortcut_Pause=19
Const PB_Shortcut_Print=42
Const PB_Shortcut_Prior=33
Const PB_Shortcut_Q=81
Const PB_Shortcut_R=82
Const PB_Shortcut_Return=13
Const PB_Shortcut_Right=39
Const PB_Shortcut_RightWindows=92
Const PB_Shortcut_S=83
Const PB_Shortcut_Scroll=145
Const PB_Shortcut_Select=41
Const PB_Shortcut_Separator=108
Const PB_Shortcut_Shift=65536
Const PB_Shortcut_Snapshot=44
Const PB_Shortcut_Space=32
Const PB_Shortcut_Subtract=109
Const PB_Shortcut_T=84
Const PB_Shortcut_Tab=9
Const PB_Shortcut_U=85
Const PB_Shortcut_Up=38
Const PB_Shortcut_V=86
Const PB_Shortcut_W=87
Const PB_Shortcut_X=88
Const PB_Shortcut_Y=89
Const PB_Shortcut_Z=90
Const PB_Splitter_FirstFixed=4
Const PB_Splitter_FirstMinimumSize=1
Const PB_Splitter_SecondFixed=8
Const PB_Splitter_SecondMinimumSize=2
Const PB_Splitter_Separator=2
Const PB_Splitter_Vertical=1
Const PB_Sprite_Alpha=2
Const PB_Sprite_Memory=1
Const PB_Sprite_Texture=4
Const PB_StatusBar_BorderLess=2
Const PB_StatusBar_Center=4
Const PB_StatusBar_Raised=1
Const PB_StatusBar_Right=8
Const PB_String_BorderLess=131072
Const PB_String_LowerCase=16
Const PB_String_MultiLine=4
Const PB_String_Numeric=8192
Const PB_String_Password=32
Const PB_String_ReadOnly=2048
Const PB_String_UpperCase=8
Const PB_Text_Border=131072
Const PB_Text_Center=1
Const PB_Text_Right=2
Const PB_ToolBarIcon_Copy=1
Const PB_ToolBarIcon_Cut=0
Const PB_ToolBarIcon_Delete=5
Const PB_ToolBarIcon_Find=12
Const PB_ToolBarIcon_Help=11
Const PB_ToolBarIcon_New=6
Const PB_ToolBarIcon_Open=7
Const PB_ToolBarIcon_Paste=2
Const PB_ToolBarIcon_Print=14
Const PB_ToolBarIcon_PrintPreview=9
Const PB_ToolBarIcon_Properties=10
Const PB_ToolBarIcon_Redo=4
Const PB_ToolBarIcon_Replace=13
Const PB_ToolBarIcon_Save=8
Const PB_ToolBarIcon_Undo=3
Const PB_TrackBar_Ticks=1
Const PB_TrackBar_Vertical=2
Const PB_Tree_AlwaysShowSelection=32
Const PB_Tree_CheckBoxes=256
Const PB_Tree_Checked=4
Const PB_Tree_Collapsed=8
Const PB_Tree_Expanded=2
Const PB_Tree_NoButtons=1
Const PB_Tree_NoLines=2
Const PB_Tree_Selected=1
Const PB_Web_Back=1
Const PB_Web_Forward=2
Const PB_Web_Refresh=4
Const PB_Web_Stop=3
Const PB_Window_BorderLess=-2147483648
Const PB_Window_Invisible=268435456
Const PB_Window_MaximizeGadget=13172736
Const PB_Window_MinimizeGadget=13238272
Const PB_Window_ScreenCentered=1
Const PB_Window_SizeGadget=12845056
Const PB_Window_SystemMenu=13107200
Const PB_Window_TitleBar=12582912
Const PB_Window_WindowCentered=2



JoshK(Posted 2004) [#4]
Example program:
Const PROGRAMTITLE$="PureBlitz demo"

AppTitle PROGRAMTITLE

;Includes
Include "purebasic_const.bb"
Include "win32_const.bb"

;Initialize graphics
w=800
h=600
Graphics3D GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),-1,2
hWND=GetActiveWindow()
InitWindow hwnd
style=GetWindowLong(hwnd,GWL_STYLE)
If Not (style And WS_CLIPCHILDREN) style=style+WS_CLIPCHILDREN
If Not (style And WS_VISIBLE) style=style+WS_VISIBLE
If Not (style And WS_BORDER) style=style+WS_BORDER
If Not (style And WS_MINIMIZEBOX) style=style+WS_MINIMIZEBOX
If Not (style And WS_MAXIMIZEBOX) style=style+WS_MAXIMIZEBOX
If Not (style And WS_SIZEBOX) style=style+WS_SIZEBOX
If Not (style And WS_SYSMENU) style=style+WS_SYSMENU
If Not (style And WS_DLGFRAME) style=style+WS_DLGFRAME
SetWindowLong hwnd,GWL_STYLE,style
x=(GetSystemMetrics(SM_CXSCREEN)-w)/2
y=(GetSystemMetrics(SM_CYSCREEN)-h)/2
MoveWindow hwnd,x,y,w,h,True
pbCreateGadgetList(hWND)
;InstallCloseHandler 148,PROGRAMTITLE

;Status bar
bar=pbCreateStatusBar(0,hWND)
statusfield=pbAddStatusBarField(200)
pbStatusBarText "Welcome to the program.",0
statusfield=pbAddStatusBarField(120)
statusfield=pbAddStatusBarField(120)
statusfield=pbAddStatusBarField(200)

;Menu
pbCreateMenu(0,hWND)
pbMenuTitle "File"
pbMenuItem 1,"New"
pbMenuBar
pbMenuItem 2,"Open..."
pbMenuItem 3,"Save"
pbMenuItem 4,"Save as..."
pbMenuBar
pbMenuItem 5,"Import..."
pbMenuItem 6,"Export..."
pbMenuBar
pbMenuItem 7,"Exit"
pbMenuTitle "Help"
pbMenuItem 8,"Help Contents"

;Toolbar
toolbarheight=26
toolbarcontainer=pbContainerGadget(1,0,0,GetSystemMetrics(SM_CXSCREEN),toolbarheight,0)
toolbar=pbCreateToolBar(0,toolbarcontainer)
pbToolBarStandardButton 1,PB_ToolBarIcon_New
pbToolBarStandardButton 2,PB_ToolBarIcon_Open
pbToolBarStandardButton 3,PB_ToolBarIcon_Save
pbToolBarSeparator
pbToolBarStandardButton 4,PB_ToolBarIcon_Cut
pbToolBarStandardButton 5,PB_ToolBarIcon_Copy
pbToolBarStandardButton 6,PB_ToolBarIcon_Paste
pbToolBarSeparator
pbToolBarStandardButton 8,PB_ToolBarIcon_Help
pbToolBarToolTip 1,"New"
pbToolBarToolTip 2,"Open"
pbToolBarToolTip 3,"Save"
pbToolBarToolTip 4,"Cut"
pbToolBarToolTip 5,"Copy"
pbToolBarToolTip 6,"Paste"
pbToolBarToolTip 8,"Help"

pbCloseGadgetList

While Not KeyHit(1)
	Wend

;UnInstallCloseHandler

pbFreeGadget 1

SendMessage hWND,WM_CLOSE,0,0

End



JoshK(Posted 2004) [#5]
Tips:

-Use CheckStatus to fill a 16-byte bank with the event data, then peek the integers for event source, etc.

-Manually free any container or other gadgets that have their own gadget lists before you close the program, or you will crash.

-You need to include your own win32_const.bb file. It's too long to post on the forum.

-In your waitevent loop, keep checking the window size to detect a window move or resize event.

-If you create a toolbar, do it inside a container gadget, or the toolbar will have no background.

-Set the graphics mode to the maximum size you might need (probably the desktop size), then resize your camera viewport to the size you really want.

-Use this to set the cls color to the windows color for a window. Use a Cls() call every time you draw the window, before rendering. GetSysColor() uses a switched red and blue value:
hue=GetSysColor(COLOR_BTNFACE)
ClsColor Blue(hue),Green(hue),Red(hue)

-Some events have to be detected by checking to see if a gadget's selection or state is changed. Treeviews and listboxes have to be done like this.

-Use the BlitzClose() dll for better handling of the window closing.

-Do NOT use a second part of the AppTitle() function, since this will override BlitzClose.


xmlspy(Posted 2004) [#6]
.


Skitchy(Posted 2004) [#7]
Niiiiice.


Brandon(Posted 2004) [#8]
This is awesome! Thanks halo!


REDi(Posted 2004) [#9]
just been looking through your pb code and spotted an error in pbOpenWindow(), or maybe you done it on purpose as it's not in the decls?


CyberHeater(Posted 2004) [#10]
Any chance that some kind soul could compile the .dll for this.
Thanks.


JoshK(Posted 2004) [#11]
No. You have to buy PureBasic, since this is mostly just a wrapper for PB commands.


TheMan(Posted 2004) [#12]
Thanks Halo, can you help me to get the win32_const.bb file, the win32 file in the code archive seems missing some functions..


Panno(Posted 2004) [#13]
thx


David819(Posted 2004) [#14]
can you please make a compiled dll of the purebasic source please for those who dont own purebasic please.


morduun(Posted 2004) [#15]
Perhaps you didn't read the part where he said you have to buy PureBasic. If a simple 'no' isn't enough, I'll clarify: compiling this DLL would be in violation of the terms of use of the PureBasic product. Pure's a good language implementation and its author has worked hard to make it what it is. If you want this functionality, show your appreciation for that and buy it.

Nice work on this, halo. Not sure if I'll use it, but thanks for sharing. Everyone else, keep in mind that there are some bits not wrapped just by the above files, so you'll need other decls as well (GetSystemMetrics, GetActiveWindow and GetWindowLong, for three).


AntonyWells(Posted 2004) [#16]
Hey halo, I've been looking for something like this so I can do a little editor for a game using me engine(which isn't B+ compatible, so that's out of the question..) is this fully featured enough to do an app? I mean are there big vital parts missing before I actually go about learning/using it?

I mean my biggest concern is mixing a gl display with it..is it possible to create multiple canvas' that I can use? (I've never done any winAPI stuff..so no idea if this is even possible at all, let alone in this.)


TheMan(Posted 2004) [#17]
"so you'll need other decls as well (GetSystemMetrics, GetActiveWindow and GetWindowLong, for three). "

Where I can Find those decls
Thanks