This is just a preview of a SDK Window/Control Class Wrapper Library. The zip does not
include any source at present as there is still a lot of work to be done on the library.
I show here the approach I am taking. At this time I decided on processing all messages
out of any Class/Interface. I can do this because I have a GLOBAL! Oh no!!!!
Yes one GLOBAL -> goApp with which I can bore down and get at most all I want.
If encapsulated processing is need a Class/Interface can be created and instantiated
in and called from the CALLBACK function.
James
include any source at present as there is still a lot of work to be done on the library.
I show here the approach I am taking. At this time I decided on processing all messages
out of any Class/Interface. I can do this because I have a GLOBAL! Oh no!!!!
Yes one GLOBAL -> goApp with which I can bore down and get at most all I want.
If encapsulated processing is need a Class/Interface can be created and instantiated
in and called from the CALLBACK function.
James
Code:
'=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* 'SED_PBWIN '=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* #COMPILE EXE #DIM ALL #TOOLS OFF '------------------------------------------------------------------------------ 'José Include files #INCLUDE ONCE "Windows.Inc" #INCLUDE ONCE "CommCtrl.inc" '------------------------------------------------------------------------------ 'Conditional Compile Equates for PBLIB95.BAS" %USE_MakeFont2 = 1 %USE_VSpaceControls = 1 %USE_CenterWindow = 1 %USE_VCenterCtrlOnDialog = 1 %USE_RECTWIDTH = 1 %USE_RECTHEIGHT = 1 #INCLUDE "PBLIB95.BAS" '------------------------------------------------------------------------------ 'Conditional Compile Equates for PBClassLib02.Bas" %USE_DisplayOpenFileClass = 1 ' %USE_DisplayBrowseClass = 1 ' %USE_PcreClass = 1 %Use_cControlClass = 1 %Use_cRaGridClass = 1 %Use_cWindowClass = 1 %Use_cAppClass = 1 #INCLUDE ONCE "PBClassLib02.Bas" '============================================================================== %GETFILEBUT = 101 %DATABUT = 105 '============================================================================== 'For now I need One GLOBAL GLOBAL goApp AS iSdkWinApp '============================================================================== CLASS cSdkWinApp INSTANCE oMainWin AS iWindow INSTANCE hInst AS LONG INSTANCE hWin AS DWORD INSTANCE oOkBut,oStatus,oCancelBut,oPanel_01,oPanel_02,oFileBut,oDataBut AS iControl INSTANCE oPanel_03, oPanel_04,oPanel_05,oPanel_06,oLBox_01,oCombo,oGrid AS iControl INSTANCE oPanel_07,oPanel_08 AS iControl INSTANCE oEdit_01,oEdit_02,oMemo_01 AS iControl INSTANCE oOption() AS iControl INSTANCE oCheck() AS iControl INSTANCE oRAGrid AS iRAGrid INSTANCE oGridCol AS iGridCol INTERFACE iSdkWinApp : INHERIT cApp,iApp PropGet(hInst,LONG) PropSet(hInst,LONG) METHOD Run() AS LONG REDIM hBtns(1 TO 3) AS DWORD LOCAL hFont AS LONG REDIM oOption(1 TO 4) REDIM oCheck(1 TO 4) LOCAL i,j,RetVal AS LONG LOCAL hGrid AS DWORD oMainWin = CLASS "cWindow" IF ISNOTHING(oMainWin) THEN RET_M(-1) oMainWin.CallBackProc = CODEPTR(MainWinCallBack) oMainWin.BackColor = GetSysColor(%COLOR_BTNFACE) oMainWin.Style = %WS_OVERLAPPEDWINDOW oMainWin.Width = 740 oMainWin.Height = 600 hWin = oMainWin.CreateWin IF hWin = 0 THEN RET_M(-2) CenterWindow hWin hFont = MakeFont2("Tahoma",11,%FW_NORMAL) 'hFont2 = 'Ok Command Button oOkBut = CLASS "cControl" IF ISNOTHING(oOkBut) THEN RET_M(-3) oOkBut.Class = "BUTTON" oOkBut.Name = "Ok Button" oOkBut.Id = %IDOK oOkBut.Text = "OK" oOkBut.Parent = hWin oOkBut.Top = 500 oOkBut.Width = 80 oOkBut.Height = 30 oOkBut.Font = hFont oOkBut.CreateControl hBtns(1) = oOkBut.Id 'Get Grid Cell Data Button oDataBut = CLASS "cControl" IF ISNOTHING(oDataBut) THEN RET_M(-3) oDataBut.Class = "BUTTON" oDataBut.Name = "oDataBut" oDataBut.Id = %DATABUT oDataBut.Text = "Grid Data" oDataBut.Parent = hWin oDataBut.Top = 500 oDataBut.Width = 80 oDataBut.Height = 30 oDataBut.Font = hFont oDataBut.CreateControl hBtns(2) = oDataBut.Id 'Cancel Command Button oCancelBut = CLASS "cControl" IF ISNOTHING(oCancelBut) THEN RET_M(-3) oCancelBut.Class = "BUTTON" oCancelBut.Name = "Cancel Button" oCancelBut.Id = %IDCANCEL oCancelBut.Text = "Cancel" oCancelBut.Parent = hWin oCancelBut.Top = 500 oCancelBut.Left = 100 oCancelBut.Height = 30 oCancelBut.Width = 80 oCancelBut.Font = hFont oCancelBut.CreateControl hBtns(3) = oCancelBut.Id 'Even space buttons Vertically VSpaceControls hWin,hBtns() 'Outer Raised Panel oPanel_01 = CLASS "cControl" IF ISNOTHING(oPanel_01) THEN RET_M(-3) oPanel_01.Class = "RPANEL" oPanel_01.Name = "oPanel_01" oPanel_01.Id = 300 oPanel_01.Text = " Select A File" oPanel_01.Left = 16 oPanel_01.Top = 16 oPanel_01.Width = 695 oPanel_01.Height = 55 oPanel_01.Parent = hWin oPanel_01.ForeColor = &H8E6B23 oPanel_01.CreateControl 'Inner sunken panel oPanel_02 = CLASS "cControl" IF ISNOTHING(oPanel_02) THEN RET_M(-3) oPanel_02.Class = "SPANEL" oPanel_02.Name = "oPanel_02" oPanel_02.Id = 301 oPanel_02.Text = "" oPanel_02.Left = 32 oPanel_02.Top = 36 oPanel_02.Width = 630 oPanel_02.Height = 22 oPanel_02.Parent = hWin oPanel_02.ForeColor = &HC00000 oPanel_02.Font = hFont oPanel_02.CreateControl 'Another Raised Panel oPanel_03 = CLASS "cControl" IF ISNOTHING(oPanel_03) THEN RET_M(-3) oPanel_03.Class = "RPANEL" oPanel_03.Name = "oPanel_03" oPanel_03.TextAlign = "CENTER" oPanel_03.Id = 302 oPanel_03.Text = "Your Options" oPanel_03.Left = 16 oPanel_03.Top = 100 oPanel_03.Width = 150 oPanel_03.Height = 150 oPanel_03.Parent = hWin oPanel_03.ForeColor = &H8E6B23 oPanel_03.CreateControl 'Check Boxes Raised Panel oPanel_04 = CLASS "cControl" IF ISNOTHING(oPanel_04) THEN RET_M(-3) oPanel_04.Class = "RPANEL" oPanel_04.Name = "oPanel_04" oPanel_04.TextAlign = "CENTER" oPanel_04.Id = 302 oPanel_04.Text = "Check Boxes" oPanel_04.Left = 200 oPanel_04.Top = 100 oPanel_04.Width = 150 oPanel_04.Height = 150 oPanel_04.Parent = hWin oPanel_04.ForeColor = &H8E6B23 oPanel_04.CreateControl 'List Box Raised Panel oPanel_05 = CLASS "cControl" IF ISNOTHING(oPanel_05) THEN RET_M(-3) oPanel_05.Class = "RPANEL" oPanel_05.Name = "oPanel_05" oPanel_05.TextAlign = "CENTER" oPanel_05.Id = 302 oPanel_05.Text = "List Box" oPanel_05.Left = 380 oPanel_05.Top = 100 oPanel_05.Width = 150 oPanel_05.Height = 150 oPanel_05.Parent = hWin oPanel_05.ForeColor = &H8E6B23 oPanel_05.CreateControl 'Combo Box Raised Panel oPanel_06 = CLASS "cControl" IF ISNOTHING(oPanel_06) THEN RET_M(-3) oPanel_06.Class = "RPANEL" oPanel_06.Name = "oPanel_6" oPanel_06.TextAlign = "CENTER" oPanel_06.Id = 302 oPanel_06.Text = "Combo Box" oPanel_06.Left = 566 oPanel_06.Top = 100 oPanel_06.Width = 150 oPanel_06.Height = 150 oPanel_06.Parent = hWin oPanel_06.ForeColor = &H8E6B23 oPanel_06.CreateControl 'Edit Control Raised Panel oPanel_07 = CLASS "cControl" IF ISNOTHING(oPanel_07) THEN RET_M(-3) oPanel_07.Class = "RPANEL" oPanel_07.Name = "oPanel_07" oPanel_07.TextAlign = "CENTER" oPanel_07.Id = 302 oPanel_07.Text = "Edit Fields" oPanel_07.Left = 16 oPanel_07.Top = 300 oPanel_07.Width = 150 oPanel_07.Height = 150 oPanel_07.Parent = hWin oPanel_07.ForeColor = &H8E6B23 oPanel_07.CreateControl 'Edit Control oEdit_01 = CLASS "cControl" IF ISNOTHING(oEdit_01) THEN RET_M(-3) oEdit_01.Class = "EDIT" oEdit_01.Name = "oEdit_01" oEdit_01.Id = 200 oEdit_01.Text = "James Fuller" oEdit_01.Left = 35 oEdit_01.Top = 350 oEdit_01.Height = 25 oEdit_01.Width = 110 oEdit_01.Parent = hWin oEdit_01.Font = hFont oEdit_01.CreateControl 'Edit Control oEdit_02 = CLASS "cControl" IF ISNOTHING(oEdit_02) THEN RET_M(-3) oEdit_02.Class = "EDIT" oEdit_02.Name = "oEdit_02" oEdit_02.Id = 201 oEdit_02.Text = "James Fuller" oEdit_02.Left = 35 oEdit_02.Top = 400 oEdit_02.Height = 25 oEdit_02.Width = 110 oEdit_02.Parent = hWin oEdit_02.Font = hFont oEdit_02.BackColor = &HC00000 oEdit_02.ForeColor = &HFFFFFF oEdit_02.CreateControl 'Panel for MEMO oPanel_08 = CLASS "cControl" IF ISNOTHING(oPanel_08) THEN RET_M(-3) oPanel_08.Class = "RPANEL" oPanel_08.Name = "oPanel_6" oPanel_08.TextAlign = "CENTER" oPanel_08.Id = 302 oPanel_08.Text = "Memo " oPanel_08.Left = 566 oPanel_08.Top = 300 oPanel_08.Width = 150 oPanel_08.Height = 150 oPanel_08.Parent = hWin oPanel_08.ForeColor = &H8E6B23 oPanel_08.CreateControl 'Multi lined edit control oMemo_01 = CLASS "cControl" IF ISNOTHING(oMemo_01) THEN RET_M(-3) oMemo_01.Class = "MEMO" oMemo_01.Name = "Memo_01" oMemo_01.Id = 900 oMemo_01.Text = "Multi Line Memo Control"+$CRLF+ "with enough text to activate the scroll bar" oMemo_01.Left = 586 oMemo_01.Top = 320 oMemo_01.Height = 100 oMemo_01.Width = 110 oMemo_01.Parent = hWin oMemo_01.Font = hFont oMemo_01.CreateControl 'Option Buttons j = 130 FOR i = 1 TO 4 oOption(i) = CLASS "cControl" IF ISNOTHING(oOption(i)) THEN RET_M(-3) oOption(i).Class = "OPTION" oOption(i).Id = 210 + i oOption(i).Parent = hWin oOption(i).Left = 50 oOption(i).Width = 100 oOption(i).Text = "Option"+FORMAT$(i) oOption(i).Top = j oOption(i).Font = hFont oOption(i).ForeColor = &H8E6B23 oOption(i).CreateControl j+=25 NEXT i 'Check Boxes j = 130 FOR i = 1 TO 4 oCheck(i) = CLASS "cControl" IF ISNOTHING(oCheck(i)) THEN RET_M(-3) oCheck(i).Class = "CHECKBOX" oCheck(i).Id = 210 + i oCheck(i).Parent = hWin oCheck(i).Left = 234 oCheck(i).Width = 100 oCheck(i).Text = "Check"+FORMAT$(i) oCheck(i).Top = j oCheck(i).Font = hFont oCheck(i).ForeColor = &H8E6B23 oCheck(i).CreateControl j+=25 NEXT i 'List Box oLBox_01 = CLASS "cControl" IF ISNOTHING(oLBox_01) THEN RET_M(-3) oLBox_01.Class = "LISTBOX" oLBox_01.Name = "LBox1" oLBox_01.Id = 301 oLBox_01.Left = 410 oLBox_01.Top = 125 oLBox_01.Width = 100 oLBox_01.Height = 120 oLBox_01.Font = hFont oLBox_01.ForeColor = &HC00000 oLBox_01.Style = %LBS_NOTIFY OR %LBS_STANDARD OR %WS_TABSTOP OR %WS_VISIBLE OR %WS_CHILD oLBox_01.List = "Item One,Item Two,Item Three,Item Four,Item Five,Item Six,Item Seven,Item Eight" oLBox_01.Parent = hWin oLBox_01.CreateControl 'Combo oCombo = CLASS "cControl" IF ISNOTHING(oCombo) THEN RET_M(-3) oCombo.Class = "COMBOBOX" oCombo.Name = "Combo" oCombo.id = 302 oCombo.Left = 580 oCombo.Top = 125 oCombo.Width = 120 oCombo.Height = 100 oCombo.Font = hFont oCombo.ForeColor = &H00C0C0 oCombo.Style = %CBS_DROPDOWN OR %WS_VSCROLL OR %WS_TABSTOP OR %WS_VISIBLE OR %WS_CHILD oCombo.List = "One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Eleven,Twelve" oCombo.Parent = hWin oCombo.CreateControl 'GetFile Name Button oFileBut = CLASS "cControl" IF ISNOTHING(oFileBut) THEN RET_M(-3) oFileBut.Class = "BUTTON" oFileBut.Name = "Ok Button" oFileBut.Id = %GETFILEBUT oFileBut.Text = "..." oFileBut.Parent = hWin oFileBut.Top = 36 oFileBut.Left = 670 oFileBut.Width = 30 oFileBut.Height = 20 oFileBut.Font = hFont oFileBut.CreateControl 'Status Bar oStatus = CLASS "cControl" IF ISNOTHING(oStatus) THEN RET_M(-3) oStatus.Id = 800 oStatus.StatusParts = "50;30;10;10" 'in %; should total 100% oStatus.Class = "STATUSBAR" oStatus.Style = &H50000003 oStatus.Parent = hWin oStatus.Text = "Status Bar" oStatus.CreateControl 'iControl RAGrid oGrid = CLASS "cControl" IF ISNOTHING(oGrid) THEN RET_M(-4) oGrid.Class = "RAGrid" oGrid.Id = 700 oGrid.Parent = hWin oGrid.Top = 300 oGrid.Left = 250 oGrid.Width = 380 oGrid.Height = 140 oGrid.Style = &H5001000D OR %WS_BORDER hGrid = oGrid.CreateControl 'Contained RAGrid Class Created in iControl oRAGrid = oGrid.oRAGrid oRAGrid.BackColor = &HC0FFFF oRAGrid.GridColor = &H808080 oRAGrid.TextColor = &H800000 oRAGrid.HeaderHeight = 50 'Add Columns 'This is the Col data UDT turned into a Class oGridCol = CLASS "cGridCol" IF ISNOTHING(oGridCol) THEN RET_M(-5) 'Add Col 0 oGridCol.Width = 100 oGridCol.HeaderText = $CR+"Name" oGridCol.HeaderAlign = %GA_ALIGN_CENTER oGridCol.ColAlign = %GA_ALIGN_LEFT oGridCol.ColDataType = %TYPE_EDITTEXT oGridCol.TextMax = 31 oRAGrid.AddColumn(oGridCol) 'Add Col 1 oGridCol.HeaderText = $CR+"Address" oRAGrid.AddColumn(oGridCol) 'Add Col 2 oGridCol.HeaderText = $CR+"Points" oGridCol.ColDataType = %TYPE_EDITLONG oGridCol.HeaderAlign = %GA_ALIGN_CENTER oGridCol.ColAlign = %GA_ALIGN_RIGHT oGridCol.TextMax = 4 oRAGrid.AddColumn(oGridCol) 'Add Col 3 oGridCol.HeaderText = $CR+"Button" oGridCol.Width = 60 oGridCol.HeaderAlign = %GA_ALIGN_CENTER oGridCol.ColAlign = %GA_ALIGN_LEFT oGridCol.ColDataType = %TYPE_COMBOBOX oGridCol.TextMax = %MAX_PATH oGridCol.FormatStr = "" oRAGrid.AddColumn(oGridCol) 'Add Row Data RetVal = oRAGrid.AddComboData(3,",one,two") RetVal = oRAGrid.AddRowData("Name#1,Address#1,1000") RetVal = oRAGrid.AddRowData("Name#2,Address#2,2000") RetVal = oRAGrid.AddRowData("Name#3,Address#3,3000") RetVal = oRAGrid.AddRowData("Name#4,Address#4,4000") RetVal = oRAGrid.AddRowData("Name#5,Address#5,4000") RetVal = oRAGrid.AddRowData("Name#6,Address#6,4000") RetVal = oRAGrid.AddRowData("Name#7,Address#7,4000") VCenterCtrlOnDialog hGrid,hWin ShowWindow hWin,%SW_SHOW RET_M(MYBASE.MsgLoop) END METHOD PropGet(oPanel_02,iControl) PropGet(oRAGrid,iRAGrid) END INTERFACE END CLASS '------------------------------------------------------------------------------ CALLBACK FUNCTION MainWinCallBack() AS LONG LOCAL lpCtlInfo AS CtlInfoType PTR LOCAL oCtl AS iControl LOCAL oDop AS iDisplayOpenFile LOCAL sFile,sCellData AS STRING SELECT CASE CB.MSG CASE %WM_CLOSE DestroyWindow CB.HNDL CASE %WM_DESTROY EnumChildWindows CB.HNDL,CODEPTR(EnumChildProc),%RemoveProps RemoveProp CB.HNDL,$ObjInfo PostQuitMessage 0 CASE %WM_CTLCOLORSTATIC,%WM_CTLCOLORBTN,%WM_CTLCOLOREDIT,%WM_CTLCOLORLISTBOX lpCtlInfo = GetProp(CB.LPARAM,$ObjInfo) IF lpCtlInfo THEN POKE DWORD,VARPTR(oCtl),@lpCtlInfo.ObjPtr IF ISNOTHING(oCtl) THEN RET_F(0) oCtl.AddRef IF oCtl.hBkBrush THEN SetBkMode CB.WPARAM,%OPAQUE SetBkColor CB.WPARAM,oCtl.BackColor SetTextColor CB.WPARAM,oCtl.ForeColor RET_F(oCtl.hBkBrush) END IF END IF CASE %WM_COMMAND IF CB.CTLMSG = %BN_CLICKED THEN SELECT CASE CONST CB.CTL CASE %IDCANCEL,%IDOK SendMessage CB.HNDL,%WM_CLOSE,0,0 CASE %GETFILEBUT oDop = CLASS "cDisplayOpenFile" IF ISNOTHING(oDop) THEN EXIT SELECT sFile = oDop.GetName IF LEN(sFile) THEN SetWindowText goApp.oPanel_02.Handle,"" SetWindowText goApp.oPanel_02.Handle,BYVAL STRPTR(sFile) END IF CASE %DATABUT sCellData = goApp.oRAGrid.GetCurrentCellStringData() ?sCellData END SELECT END IF END SELECT FUNCTION = DefWindowProc(CB.HNDL, CB.MSG, CB.WPARAM, CB.LPARAM) END FUNCTION '------------------------------------------------------------------------------ FUNCTION EnumChildProc(BYVAL hChild AS DWORD,BYVAL lParam AS LONG)AS LONG 'Remove Props IF lParam = %RemoveProps THEN RemoveProp hChild,$ObjInfo END IF END FUNCTION '------------------------------------------------------------------------------ '============================================================================== FUNCTION WINMAIN (BYVAL hInstance AS LONG, _ BYVAL hPrevInstance AS LONG, _ BYVAL lpCmdLine AS ASCIIZ PTR, _ BYVAL iCmdShow AS LONG) AS LONG TRACE NEW "SDK05_TRACE.TXT" LOCAL iccx AS INIT_COMMON_CONTROLSEX LOCAL hRaGrid AS DWORD iccx.dwsize = SIZEOF(iccx) iccx.dwicc = %ICC_BAR_CLASSES InitCommonControlsEx iccx 'Load RAGrid hRaGrid = LoadLibrary("RAGrid.dll") IF hRAGrid = 0 THEN RET_F(0) 'On No a GLOBAL goApp = CLASS "cSdkWinApp" goApp.hInst = hInstance goApp.Run FreeLibrary hRaGrid TRACE CLOSE END FUNCTION
Comment