• Welcome to Powerbasic Museum 2020-B.
 

News:

Forum in repository mode. No new members allowed.

Main Menu

REBAR/PB-Header/Version Question

Started by Peter Weis, May 06, 2012, 12:32:33 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Peter Weis

The following example works with PBWIN 9 (PB-Headerfiles) / XP and als with PB 9 / Windows 7.
It does not work with PBWIN 10 (Jose Header Files) under neither OS. There is no REBAR shown.

Anybody an idea, WHY?


'==============================================================================
'
'   REBAR.BAS example for PowerBASIC for Windows PB/WIN 7.0
'   A simple DDT Rebar Control example
'
'   Includes portions of:
'   TOOLBAR.BAS example for PowerBASIC for Windows PB/WIN 7.0
'   Copyright (c) 2002 by PowerBASIC, Inc.
'
'
'==============================================================================

'------------------------------------------------------------------------------
' Metastatements
'------------------------------------------------------------------------------
#COMPILE EXE
#DIM ALL


'------------------------------------------------------------------------------
' Initial Declares - eliminate unnecessary macros in COMMCTRL.INC
'------------------------------------------------------------------------------
#IF 0
%NOANIMATE         = 1  ' Animate control
%NOBUTTON          = 1  ' Button
%NOCOMBO           = 1  ' Combo box
%NOCOMBOEX         = 1  ' ComboBoxEx
%NODATETIMEPICK    = 1  ' Date/time picker
%NODRAGLIST        = 1  ' Drag list control
%NOEDIT            = 1  ' Edit control
%NOFLATSBAPIS      = 1  ' Flat scroll bar
%NOHEADER          = 1  ' Header control
%NOHOTKEY          = 1  ' HotKey control
%NOIMAGELIST       = 1  ' Image APIs
%NOIPADDRESS       = 1  ' IP Address edit control
%NOLIST            = 1  ' List box control
%NOLISTVIEW        = 1  ' ListView control
%NOMENUHELP        = 1  ' Menu help
%NOMONTHCAL        = 1  ' MonthCal
%NOMUI             = 1  ' MUI
%NONATIVEFONTCTL   = 1  ' Native Font control
%NOPAGESCROLLER    = 1  ' Pager
%NOPROGRESS        = 1  ' Progress control
'%NOREBAR           = 1  ' Rebar control
%NOSTATUSBAR       = 1  ' Status bar
%NOTABCONTROL      = 1  ' Tab control
'%NOTOOLBAR        = 1  ' Tool bar
'%NOTOOLTIPS       = 1  ' Tool tips
%NOTRACKBAR        = 1  ' Track bar
%NOTRACKMOUSEEVENT = 1  ' Track Mouse Event
%NOTREEVIEW        = 1  ' TreeView
%NOUPDOWN          = 1  ' Up Down arrow control
#ENDIF

'------------------------------------------------------------------------------
' Include files
'------------------------------------------------------------------------------
#INCLUDE "WIN32API.INC"
#INCLUDE "COMMCTRL.INC"
#INCLUDE "InitCtrl.inc"

'------------------------------------------------------------------------------
' Equates
'------------------------------------------------------------------------------
$AppTitle    = "DDT Rebar Example"
%ToolButtons = 10
%ID_REBAR    = 1001
%ID_COMBOBOX = 1002
%ID_TOOLBAR  = 1003
%ID_Prev     = 101
%ID_Next     = 102
%ID_Mode1    = 103
%ID_Mode2    = 104

'------------------------------------------------------------------------------
' Globals
'------------------------------------------------------------------------------
GLOBAL hRebar AS DWORD

'------------------------------------------------------------------------------
' Declarations
'------------------------------------------------------------------------------
DECLARE CALLBACK FUNCTION DialogCallback
DECLARE FUNCTION CreateRebar (BYVAL hParent AS DWORD) AS LONG
DECLARE FUNCTION CreateComboBox (BYVAL hParent AS DWORD) AS DWORD
DECLARE FUNCTION CreateToolBar (BYVAL hParent AS DWORD) AS DWORD


FUNCTION CreateComboBox (BYVAL hParent AS DWORD) AS DWORD

   REGISTER i AS LONG
   LOCAL hComboBox AS DWORD

   CONTROL ADD COMBOBOX, hParent, %ID_COMBOBOX,, 0, 0, 0, 100, _
      %WS_CHILD OR %WS_VISIBLE OR %CBS_DROPDOWNLIST OR %WS_VSCROLL _
      OR %WS_CLIPSIBLINGS OR %WS_CLIPCHILDREN
   CONTROL HANDLE hParent, %ID_COMBOBOX TO hComboBox
   FOR i = 1 TO 20
      COMBOBOX ADD hParent, %ID_COMBOBOX, "Item " & FORMAT$(i)
   NEXT
   COMBOBOX SELECT hParent, %ID_COMBOBOX, 1
   FUNCTION = hComboBox

END FUNCTION

FUNCTION CreateToolBar (BYVAL hParent AS DWORD) AS DWORD

   ' General Register variables for speed optimization
   REGISTER x AS LONG
   LOCAL hToolBar AS DWORD

   ' Toolbar variables
   LOCAL Tbb()      AS TBBUTTON
   LOCAL Tabm       AS TBADDBITMAP
   DIM Tbb(0 TO %ToolButtons - 1) AS LOCAL TBBUTTON

   CONTROL ADD "TOOLBARWINDOW32", hParent, %ID_TOOLBAR, "", 0, 0, 0, 0, _
       %WS_CHILD OR %WS_VISIBLE OR %TBSTYLE_TOOLTIPS OR %TBSTYLE_FLAT _
       OR %WS_CLIPCHILDREN OR %WS_CLIPSIBLINGS OR %CCS_NODIVIDER OR %CCS_NORESIZE

   ' Init Tbb array.
   FOR x = 0 TO %ToolButtons - 1
       ' Set the initial states for each button
       Tbb(x).iBitmap = 0
       Tbb(x).idCommand = 0
       Tbb(x).fsState = %TBSTATE_ENABLED
       Tbb(x).fsStyle = %TBSTYLE_BUTTON
       Tbb(x).dwData = 0
       Tbb(x).iString = 0

       SELECT CASE AS LONG x
          CASE 0,3,6,8
              ' Gap creation buttons.
              Tbb(x).fsStyle = %TBSTYLE_SEP
          CASE 1&
              Tbb(x).iBitmap = %STD_UNDO
              Tbb(x).idCommand = %ID_Prev
              Tbb(x).iString = 0
              Tbb(x).fsState = 0 ' Would be %TBSTATE_DISABLED if defined
          CASE 2&
              Tbb(x).iBitmap = %STD_REDOW
              Tbb(x).idCommand = %ID_Next
              Tbb(x).iString = 1
          CASE 4&
              Tbb(x).iBitmap = %STD_FILENEW
              Tbb(x).idCommand = %ID_Mode1
              Tbb(x).iString = 2
              Tbb(x).fsState = %TBSTATE_ENABLED    OR %TBSTATE_CHECKED
              Tbb(x).fsStyle = %TBSTYLE_CHECKGROUP OR %TBSTYLE_BUTTON
          CASE 5&
              Tbb(x).iBitmap = %STD_FILESAVE
              Tbb(x).idCommand = %ID_Mode2
              Tbb(x).iString = 3
              Tbb(x).fsStyle = %TBSTYLE_CHECKGROUP OR %TBSTYLE_BUTTON
          CASE 7&
              Tbb(x).iBitmap = %STD_PRINT
              Tbb(x).idCommand = %IDOK
              Tbb(x).iString = 4
          CASE 9&
              Tbb(x).iBitmap = %STD_DELETE
              Tbb(x).idCommand = %IDCANCEL
              Tbb(x).iString = 5
       END SELECT
   NEXT x

   Tabm.nID   = %IDB_STD_LARGE_COLOR ' Use the ID of the bitmap image, ie, %ID_TOOLBAR
   Tabm.hInst = %HINST_COMMCTRL      ' Use GetModuleHandle(BYVAL %NULL)
                                      ' if using a bitmap in a linked resource file
   ' Set the imge list for the TB
   CONTROL SEND hParent, %ID_TOOLBAR, %TB_ADDBITMAP, %ToolButtons, VARPTR(Tabm)

   ' Set the buttons
   CONTROL SEND hParent, %ID_TOOLBAR, %TB_BUTTONSTRUCTSIZE, SIZEOF(Tbb(0)), 0
   CONTROL SEND hParent, %ID_TOOLBAR, %TB_ADDBUTTONS, %ToolButtons, VARPTR(Tbb(0))

   CONTROL HANDLE hParent, %ID_TOOLBAR TO hToolBar
   FUNCTION = hToolBar

END FUNCTION

FUNCTION CreateRebar (BYVAL hParent AS DWORD) AS LONG

   LOCAL rbi AS REBARINFO
   LOCAL rbBand AS REBARBANDINFO
   LOCAL rc AS RECT
   LOCAL hCbBox AS DWORD
   LOCAL szCbText AS ASCIZ * 255
   LOCAL hTbBar AS DWORD
   LOCAL szTbText AS ASCIZ * 255
   LOCAL dwBtnSize AS DWORD

   CONTROL ADD "ReBarWindow32", hParent, %ID_REBAR, "", 0, 0, 0, 0, _
      %WS_CHILD OR %WS_VISIBLE OR %WS_CLIPSIBLINGS OR %WS_CLIPCHILDREN OR _
      %RBS_VARHEIGHT OR %RBS_BANDBORDERS OR %CCS_NODIVIDER
   CONTROL HANDLE hParent, %ID_REBAR TO hRebar

   MSGBOX STR$(hrebar)

   ' Initialize and send the REBARINFO structure
   rbi.cbSize = SIZEOF(rbi)
   rbi.fMask = 0
   rbi.himl = 0
   CONTROL SEND hParent, %ID_REBAR, %RB_SETBARINFO, 0, VARPTR(rbi)

   '// Initialize REBARBANDINFO for all rebar bands
   rbBand.cbSize     = SIZEOF(rbBand)
   rbBand.fMask      = %RBBIM_COLORS    OR _    '// clrFore and clrBack are valid
                       %RBBIM_CHILD     OR _    '// hwndChild is valid
                       %RBBIM_CHILDSIZE OR _    '// cxMinChild and cyMinChild are valid
                       %RBBIM_STYLE     OR _    '// fStyle is valid
                       %RBBIM_ID        OR _    '// wID is valid
                       %RBBIM_SIZE      OR _    '// cx is valid
                       %RBBIM_TEXT      OR _    '// lpText is valid
                       %RBBIM_BACKGROUND        '// hbmBack is valid
   rbBand.clrFore    = RGB(250,0,0)             '// Red
   rbBand.clrBack    = RGB(250,250,0)           '// Yellow
   rbBand.fStyle     = %RBBS_NOVERT     OR _    '// do not display in vertical orientation
                       %RBBS_CHILDEDGE  OR _
                       %RBBS_FIXEDBMP
   rbBand.hbmBack    = 0

   'hTbBar = CreateToolBar(hParent)
   dwBtnSize = SendMessage(hTbBar, %TB_GETBUTTONSIZE, 0, 0)
   szTbText          = "ToolBar"
   rbBand.lpText     = VARPTR(szTbText)
   rbBand.hwndChild  = hTbBar
   rbBand.wID        = %ID_TOOLBAR
   rbBand.cxMinChild = 230
   rbBand.cyMinChild = HIWRD(dwBtnSize)
   rbBand.cx         = 250

   '// Insert band into rebar
   CONTROL SEND hParent, %ID_REBAR, %RB_INSERTBAND, -1, VARPTR(rbBand)

   'hCbBox = CreateComboBox(hParent)

   szCbText          = "ComboBox"
   rbBand.lpText     = VARPTR(szCbText)
   rbBand.hwndChild  = hCbBox
   rbBand.wID        = %ID_COMBOBOX
   GetWindowRect hCbBox, rc
   rbBand.cxMinChild = 150
   rbBand.cyMinChild = rc.nBottom - rc.nTop
   rbBand.cx         = 400

   '// Insert band into rebar
   CONTROL SEND hParent, %ID_REBAR, %RB_INSERTBAND, -1, VARPTR(rbBand)


END FUNCTION


'------------------------------------------------------------------------------
' Main entry point for the application
'------------------------------------------------------------------------------
FUNCTION PBMAIN() AS LONG

   LOCAL hDlg AS DWORD

   ' Initialize the common control library
   InitComCtl32 %ICC_COOL_CLASSES OR %ICC_USEREX_CLASSES

   ' No error trapping, we will handle it ourself
   ON ERROR RESUME NEXT

   DIALOG NEW %HWND_DESKTOP, $AppTitle, 0, 0, _
       350, 200, %WS_MAXIMIZEBOX OR %WS_MINIMIZEBOX OR %WS_SYSMENU OR _
       %WS_THICKFRAME OR %WS_CLIPCHILDREN OR %WS_CLIPSIBLINGS OR %DS_CENTER _
       TO hDlg

   CreateRebar hDlg

   DIALOG SHOW MODAL hDlg CALL DialogCallback

END FUNCTION


'------------------------------------------------------------------------------
' Main callback
'------------------------------------------------------------------------------
CALLBACK FUNCTION DialogCallback

    LOCAL  x         AS LONG
    LOCAL  pTOOLTIP  AS TOOLTIPTEXT PTR          ' Structure pointer via NMHDR
    STATIC szTipText AS ASCIZ * 64              ' ToolTips text buffer

    SELECT CASE CBMSG

    CASE %WM_COMMAND
       IF CBCTL = %IDCANCEL THEN DIALOG END CBHNDL, %TRUE

    CASE %WM_SIZE
       MoveWindow hRebar, 0, 0, LOWRD(CBLPARAM), HIWRD(CBLPARAM), %TRUE

    CASE %WM_NOTIFY
        ' Init pointer value
        pTOOLTIP = CBLPARAM

        IF @pTOOLTIP.hdr.code = %TTN_NEEDTEXT THEN

            ' Locate the tooltip text from the DATA
            FOR x = 1 TO DATACOUNT STEP 2
                IF VAL(READ$(x)) = @pTOOLTIP.hdr.idFrom THEN
                    szTipText = READ$(x + 1)
                    @pTOOLTIP.lpszText = VARPTR(szTipText)
                    FUNCTION = 1
                    EXIT FOR
                END IF
            NEXT x

        END IF

    END SELECT

    ' Data comprises the ID of toolbar button, followed by the tooltip description
    DATA 101,   "Previous item"
    DATA 102,   "Next item"
    DATA 103,   "Create a new item"
    DATA 104,   "Use an existing item"
    DATA 1,     "Print current item"
    DATA 2,     "Quit the application"

END FUNCTION


José Roca

This works.


'==============================================================================
'
'   REBAR.BAS example for PowerBASIC for Windows PB/WIN 7.0
'   A simple DDT Rebar Control example
'
'   Includes portions of:
'   TOOLBAR.BAS example for PowerBASIC for Windows PB/WIN 7.0
'   Copyright (c) 2002 by PowerBASIC, Inc.
'
'
'==============================================================================

'------------------------------------------------------------------------------
' Metastatements
'------------------------------------------------------------------------------
#COMPILE EXE
#DIM ALL


'------------------------------------------------------------------------------
' Initial Declares - eliminate unnecessary macros in COMMCTRL.INC
'------------------------------------------------------------------------------
#IF 0
%NOANIMATE         = 1  ' Animate control
%NOBUTTON          = 1  ' Button
%NOCOMBO           = 1  ' Combo box
%NOCOMBOEX         = 1  ' ComboBoxEx
%NODATETIMEPICK    = 1  ' Date/time picker
%NODRAGLIST        = 1  ' Drag list control
%NOEDIT            = 1  ' Edit control
%NOFLATSBAPIS      = 1  ' Flat scroll bar
%NOHEADER          = 1  ' Header control
%NOHOTKEY          = 1  ' HotKey control
%NOIMAGELIST       = 1  ' Image APIs
%NOIPADDRESS       = 1  ' IP Address edit control
%NOLIST            = 1  ' List box control
%NOLISTVIEW        = 1  ' ListView control
%NOMENUHELP        = 1  ' Menu help
%NOMONTHCAL        = 1  ' MonthCal
%NOMUI             = 1  ' MUI
%NONATIVEFONTCTL   = 1  ' Native Font control
%NOPAGESCROLLER    = 1  ' Pager
%NOPROGRESS        = 1  ' Progress control
'%NOREBAR           = 1  ' Rebar control
%NOSTATUSBAR       = 1  ' Status bar
%NOTABCONTROL      = 1  ' Tab control
'%NOTOOLBAR        = 1  ' Tool bar
'%NOTOOLTIPS       = 1  ' Tool tips
%NOTRACKBAR        = 1  ' Track bar
%NOTRACKMOUSEEVENT = 1  ' Track Mouse Event
%NOTREEVIEW        = 1  ' TreeView
%NOUPDOWN          = 1  ' Up Down arrow control
#ENDIF

'------------------------------------------------------------------------------
' Include files
'------------------------------------------------------------------------------
#INCLUDE "WIN32API.INC"
#INCLUDE "COMMCTRL.INC"
#INCLUDE "InitCtrl.inc"

'------------------------------------------------------------------------------
' Equates
'------------------------------------------------------------------------------
$AppTitle    = "DDT Rebar Example"
%ToolButtons = 10
%ID_REBAR    = 1001
%ID_COMBOBOX = 1002
%ID_TOOLBAR  = 1003
%ID_Prev     = 101
%ID_Next     = 102
%ID_Mode1    = 103
%ID_Mode2    = 104

'------------------------------------------------------------------------------
' Globals
'------------------------------------------------------------------------------
GLOBAL hRebar AS DWORD

'------------------------------------------------------------------------------
' Declarations
'------------------------------------------------------------------------------
DECLARE CALLBACK FUNCTION DialogCallback
DECLARE FUNCTION CreateRebar (BYVAL hParent AS DWORD) AS LONG
DECLARE FUNCTION CreateComboBox (BYVAL hParent AS DWORD) AS DWORD
DECLARE FUNCTION CreateToolBar (BYVAL hParent AS DWORD) AS DWORD


FUNCTION CreateComboBox (BYVAL hParent AS DWORD) AS DWORD

   REGISTER i AS LONG
   LOCAL hComboBox AS DWORD

   CONTROL ADD COMBOBOX, hParent, %ID_COMBOBOX,, 0, 0, 0, 100, _
      %WS_CHILD OR %WS_VISIBLE OR %CBS_DROPDOWNLIST OR %WS_VSCROLL _
      OR %WS_CLIPSIBLINGS OR %WS_CLIPCHILDREN
   CONTROL HANDLE hParent, %ID_COMBOBOX TO hComboBox
   FOR i = 1 TO 20
      COMBOBOX ADD hParent, %ID_COMBOBOX, "Item " & FORMAT$(i)
   NEXT
   COMBOBOX SELECT hParent, %ID_COMBOBOX, 1
   FUNCTION = hComboBox

END FUNCTION

FUNCTION CreateToolBar (BYVAL hParent AS DWORD) AS DWORD

   ' General Register variables for speed optimization
   REGISTER x AS LONG
   LOCAL hToolBar AS DWORD

   ' Toolbar variables
   LOCAL Tbb()      AS TBBUTTON
   LOCAL Tabm       AS TBADDBITMAP
   DIM Tbb(0 TO %ToolButtons - 1) AS LOCAL TBBUTTON

   CONTROL ADD "TOOLBARWINDOW32", hParent, %ID_TOOLBAR, "", 0, 0, 0, 0, _
       %WS_CHILD OR %WS_VISIBLE OR %TBSTYLE_TOOLTIPS OR %TBSTYLE_FLAT _
       OR %WS_CLIPCHILDREN OR %WS_CLIPSIBLINGS OR %CCS_NODIVIDER OR %CCS_NORESIZE

   ' Init Tbb array.
   FOR x = 0 TO %ToolButtons - 1
       ' Set the initial states for each button
       Tbb(x).iBitmap = 0
       Tbb(x).idCommand = 0
       Tbb(x).fsState = %TBSTATE_ENABLED
       Tbb(x).fsStyle = %TBSTYLE_BUTTON
       Tbb(x).dwData = 0
       Tbb(x).iString = 0

       SELECT CASE AS LONG x
          CASE 0,3,6,8
              ' Gap creation buttons.
              Tbb(x).fsStyle = %TBSTYLE_SEP
          CASE 1&
              Tbb(x).iBitmap = %STD_UNDO
              Tbb(x).idCommand = %ID_Prev
              Tbb(x).iString = 0
              Tbb(x).fsState = 0 ' Would be %TBSTATE_DISABLED if defined
          CASE 2&
              Tbb(x).iBitmap = %STD_REDOW
              Tbb(x).idCommand = %ID_Next
              Tbb(x).iString = 1
          CASE 4&
              Tbb(x).iBitmap = %STD_FILENEW
              Tbb(x).idCommand = %ID_Mode1
              Tbb(x).iString = 2
              Tbb(x).fsState = %TBSTATE_ENABLED    OR %TBSTATE_CHECKED
              Tbb(x).fsStyle = %TBSTYLE_CHECKGROUP OR %TBSTYLE_BUTTON
          CASE 5&
              Tbb(x).iBitmap = %STD_FILESAVE
              Tbb(x).idCommand = %ID_Mode2
              Tbb(x).iString = 3
              Tbb(x).fsStyle = %TBSTYLE_CHECKGROUP OR %TBSTYLE_BUTTON
          CASE 7&
              Tbb(x).iBitmap = %STD_PRINT
              Tbb(x).idCommand = %IDOK
              Tbb(x).iString = 4
          CASE 9&
              Tbb(x).iBitmap = %STD_DELETE
              Tbb(x).idCommand = %IDCANCEL
              Tbb(x).iString = 5
       END SELECT
   NEXT x

   Tabm.nID   = %IDB_STD_LARGE_COLOR ' Use the ID of the bitmap image, ie, %ID_TOOLBAR
   Tabm.hInst = %HINST_COMMCTRL      ' Use GetModuleHandle(BYVAL %NULL)
                                      ' if using a bitmap in a linked resource file
   ' Set the imge list for the TB
   CONTROL SEND hParent, %ID_TOOLBAR, %TB_ADDBITMAP, %ToolButtons, VARPTR(Tabm)

   ' Set the buttons
   CONTROL SEND hParent, %ID_TOOLBAR, %TB_BUTTONSTRUCTSIZE, SIZEOF(Tbb(0)), 0
   CONTROL SEND hParent, %ID_TOOLBAR, %TB_ADDBUTTONS, %ToolButtons, VARPTR(Tbb(0))

   CONTROL HANDLE hParent, %ID_TOOLBAR TO hToolBar
   FUNCTION = hToolBar

END FUNCTION

FUNCTION CreateRebar (BYVAL hParent AS DWORD) AS LONG

   LOCAL rbi AS REBARINFO
   LOCAL rbBand AS REBARBANDINFO
   LOCAL rc AS RECT
   LOCAL hCbBox AS DWORD
   LOCAL szCbText AS ASCIZ * 255
   LOCAL hTbBar AS DWORD
   LOCAL szTbText AS ASCIZ * 255
   LOCAL dwBtnSize AS DWORD

   CONTROL ADD "ReBarWindow32", hParent, %ID_REBAR, "", 0, 0, 200, 300, _
      %WS_CHILD OR %WS_VISIBLE OR %WS_CLIPSIBLINGS OR %WS_CLIPCHILDREN OR _
      %RBS_VARHEIGHT OR %RBS_BANDBORDERS OR %CCS_NODIVIDER
   CONTROL HANDLE hParent, %ID_REBAR TO hRebar

'   MSGBOX STR$(hrebar)

   ' Initialize and send the REBARINFO structure
   rbi.cbSize = SIZEOF(rbi)
   rbi.fMask = 0
   rbi.himl = 0
   CONTROL SEND hParent, %ID_REBAR, %RB_SETBARINFO, 0, VARPTR(rbi)

   '// Initialize REBARBANDINFO for all rebar bands
'   rbBand.cbSize     = SIZEOF(rbBand)
   IF AfxGetWindowsVersion => 6.00 AND AfxGetComCtlVersion => 6.00 THEN
      rbBand.cbSize  = %REBARBANDINFO_V6_SIZE
   ELSE
      rbBand.cbSize  = %REBARBANDINFO_V3_SIZE
   END IF

   rbBand.fMask      = %RBBIM_COLORS    OR _    '// clrFore and clrBack are valid
                       %RBBIM_CHILD     OR _    '// hwndChild is valid
                       %RBBIM_CHILDSIZE OR _    '// cxMinChild and cyMinChild are valid
                       %RBBIM_STYLE     OR _    '// fStyle is valid
                       %RBBIM_ID        OR _    '// wID is valid
                       %RBBIM_SIZE      OR _    '// cx is valid
                       %RBBIM_TEXT      OR _    '// lpText is valid
                       %RBBIM_BACKGROUND        '// hbmBack is valid
   rbBand.clrFore    = RGB(250,0,0)             '// Red
   rbBand.clrBack    = RGB(250,250,0)           '// Yellow
   rbBand.fStyle     = %RBBS_NOVERT     OR _    '// do not display in vertical orientation
                       %RBBS_CHILDEDGE  OR _
                       %RBBS_FIXEDBMP
   rbBand.hbmBack    = 0
   rbBand.cx = 300
   rbBand.cxIdeal    = 399

   hTbBar = CreateToolBar(hParent)
   dwBtnSize = SendMessage(hTbBar, %TB_GETBUTTONSIZE, 0, 0)
   szTbText          = "ToolBar"
   rbBand.lpText     = VARPTR(szTbText)
   rbBand.hwndChild  = hTbBar
   rbBand.wID        = %ID_TOOLBAR
   rbBand.cxMinChild = 230
   rbBand.cyMinChild = HIWRD(dwBtnSize)
   rbBand.cx         = 250

   '// Insert band into rebar
   CONTROL SEND hParent, %ID_REBAR, %RB_INSERTBAND, -1, VARPTR(rbBand)

   hCbBox = CreateComboBox(hParent)

   szCbText          = "ComboBox"
   rbBand.lpText     = VARPTR(szCbText)
   rbBand.hwndChild  = hCbBox
   rbBand.wID        = %ID_COMBOBOX
   GetWindowRect hCbBox, rc
   rbBand.cxMinChild = 150
   rbBand.cyMinChild = rc.nBottom - rc.nTop
   rbBand.cx         = 400

'   '// Insert band into rebar
   CONTROL SEND hParent, %ID_REBAR, %RB_INSERTBAND, -1, VARPTR(rbBand)


END FUNCTION


'------------------------------------------------------------------------------
' Main entry point for the application
'------------------------------------------------------------------------------
FUNCTION PBMAIN() AS LONG

   LOCAL hDlg AS DWORD

   ' Initialize the common control library
   InitComCtl32 %ICC_COOL_CLASSES OR %ICC_USEREX_CLASSES

   ' No error trapping, we will handle it ourself
   ON ERROR RESUME NEXT

   DIALOG NEW %HWND_DESKTOP, $AppTitle, 0, 0, _
       350, 200, %WS_MAXIMIZEBOX OR %WS_MINIMIZEBOX OR %WS_SYSMENU OR _
       %WS_THICKFRAME OR %WS_CLIPCHILDREN OR %WS_CLIPSIBLINGS OR %DS_CENTER _
       TO hDlg

   CreateRebar hDlg

   DIALOG SHOW MODAL hDlg CALL DialogCallback

END FUNCTION


'------------------------------------------------------------------------------
' Main callback
'------------------------------------------------------------------------------
CALLBACK FUNCTION DialogCallback

    LOCAL  x         AS LONG
    LOCAL  pTOOLTIP  AS TOOLTIPTEXT PTR          ' Structure pointer via NMHDR
    STATIC szTipText AS ASCIZ * 64              ' ToolTips text buffer

    SELECT CASE CBMSG

    CASE %WM_COMMAND
       IF CBCTL = %IDCANCEL THEN DIALOG END CBHNDL, %TRUE

    CASE %WM_SIZE
       MoveWindow hRebar, 0, 0, LOWRD(CBLPARAM), HIWRD(CBLPARAM), %TRUE

    CASE %WM_NOTIFY
        ' Init pointer value
        pTOOLTIP = CBLPARAM

        IF @pTOOLTIP.hdr.code = %TTN_NEEDTEXT THEN

            ' Locate the tooltip text from the DATA
            FOR x = 1 TO DATACOUNT STEP 2
                IF VAL(READ$(x)) = @pTOOLTIP.hdr.idFrom THEN
                    szTipText = READ$(x + 1)
                    @pTOOLTIP.lpszText = VARPTR(szTipText)
                    FUNCTION = 1
                    EXIT FOR
                END IF
            NEXT x

        END IF

    END SELECT

    ' Data comprises the ID of toolbar button, followed by the tooltip description
    DATA 101,   "Previous item"
    DATA 102,   "Next item"
    DATA 103,   "Create a new item"
    DATA 104,   "Use an existing item"
    DATA 1,     "Print current item"
    DATA 2,     "Quit the application"

END FUNCTION


I have changed


   rbBand.cbSize     = SIZEOF(rbBand)


to


   IF AfxGetWindowsVersion => 6.00 AND AfxGetComCtlVersion => 6.00 THEN
      rbBand.cbSize  = %REBARBANDINFO_V6_SIZE
   ELSE
      rbBand.cbSize  = %REBARBANDINFO_V3_SIZE
   END IF


The size of the REBARBANDINFO structure is bigger in Vista/Windows 7, but only if themes are used. Therefore, we must check both the OS version and the version of commctl.dll used: 5 without themes, 6 with themes.