Announcement

Collapse

Forum Guidelines

This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.
See more
See less

Vertical toolbar demo

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Vertical toolbar demo

    Code:
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    ' Vertical toolbar demo, by Borje Hagsten
    ' Shows a way how to create a vertical toolbar. Also shows a way
    ' to create a popup toolbar, activated by click on a check button.
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    ' First, eliminate some unnecessary macros in COMMCTRL.INC
    '--------------------------------------------------------------------
     %NOANIMATE       = 1
     %NOBUTTON        = 1
     %NOCOMBO         = 1
     %NODATETIMEPICK  = 1
     %NODRAGLIST      = 1
     %NOEDIT          = 1
     %NOFLATSBAPIS    = 1
     %NOHEADER        = 1
     %NOHOTKEY        = 1
     %NOIMAGELIST     = 1
     %NOIPADDRESS     = 1
     %NOLIST          = 1
     %NOLISTVIEW      = 1
     %NOMONTHCAL      = 1
     %NONATIVEFONTCTL = 1
     %NOPAGESCROLLER  = 1
     %NOPROGRESS      = 1
     %NOREBAR         = 1
     %NOSTATUSBAR     = 1
     %NOTABCONTROL    = 1
    ' %NOTOOLBAR       = 1
     %NOTOOLTIPS      = 1
     %NOTRACKBAR      = 1
     %NOTREEVIEW      = 1
     %NOUPDOWN        = 1
    '--------------------------------------------------------------------
    #COMPILE EXE
    #INCLUDE  "WIN32API.INC"
    #INCLUDE  "COMMCTRL.INC"
    '--------------------------------------------------------------------
    %ID_NEW     = 101
    %ID_OPEN    = 102
    %ID_TOOL    = 103
    %ID_TOOLBAR = 200
    %ID_POPUPTB = 300
    '--------------------------------------------------------------------
    GLOBAL hDlg AS LONG, ghTBar AS LONG, ghPopupTBar AS LONG, gTBBRC AS RECT
    '--------------------------------------------------------------------
    DECLARE CALLBACK FUNCTION DlgCallback
     
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    ' Main procedure
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    FUNCTION PBMAIN() AS LONG
      LOCAL s AS STRING, rc AS RECT
     
      DIALOG NEW %HWND_DESKTOP, "Vertical Toolbar demo",,, 320, 200, _
                 %WS_OVERLAPPEDWINDOW TO hDlg
     
      'no other controls here, so add a dummy control, to avoid first
      'button in toolbar from starting in rasied mode (DDT focus problem)
      CONTROL ADD LABEL, hDlg, -1, "", 0, 0, 0, 0
     
    '-------------------------------------------------------------------
    ' Build simple toolbar
    '-------------------------------------------------------------------
      LOCAL icc As INIT_COMMON_CONTROLSEX
      DIM Tbb(5) AS LOCAL TBBUTTON
     
      icc.dwSize= SizeOf(icc)
      icc.dwIcc = %ICC_BAR_CLASSES
      InitCommonControlsEx icc     'initiate toolbar class
     
      Tbb(0).fsState = %TBSTATE_ENABLED : Tbb(0).fsStyle   = %TBSTYLE_BUTTON
      Tbb(0).iBitmap = %STD_FILENEW     : Tbb(0).idCommand = %ID_NEW   : Tbb(1).iString = 0
      Tbb(1).fsState = %TBSTATE_ENABLED : Tbb(1).fsStyle   = %TBSTYLE_BUTTON
      Tbb(1).iBitmap = %STD_FILEOPEN    : Tbb(1).idCommand = %ID_OPEN  : Tbb(1).iString = 1
      Tbb(2).fsState = %TBSTATE_ENABLED : Tbb(2).fsStyle   = %TBSTYLE_SEP
      Tbb(3).fsState = %TBSTATE_ENABLED : Tbb(3).fsStyle   = %TBSTYLE_CHECK
      Tbb(3).iBitmap = %STD_HELP        : Tbb(3).idCommand = %ID_TOOL : Tbb(3).iString = 2
      Tbb(4).fsState = %TBSTATE_ENABLED : Tbb(4).fsStyle   = %TBSTYLE_SEP
      Tbb(5).fsState = %TBSTATE_ENABLED : Tbb(5).fsStyle   = %TBSTYLE_BUTTON
      Tbb(5).iBitmap = %STD_DELETE      : Tbb(5).idCommand = %IDCANCEL : Tbb(5).iString = 3
     
      ghTBar = CreateToolbarEx(hDlg, %WS_CHILD OR %WS_VISIBLE OR %WS_THICKFRAME OR _
                                     %TBSTYLE_LIST OR %CCS_NORESIZE OR %CCS_NODIVIDER, _
                                     %ID_TOOLBAR, 26, %HINST_COMMCTRL, %IDB_STD_LARGE_COLOR, _
                                     tbb(0), 6, 0, 0, 0, 0, LEN(TBBUTTON))
     
      CALL SetWindowLong(ghTBar, %GWL_STYLE, _
                         GetWindowLong(ghTBar, %GWL_STYLE) OR %TBSTYLE_FLAT)     'set flat style
     
      s = "  &New " & $NUL & "  &Open " & $NUL & _
          "  &Popup  " & $NUL & "  &Close " & $NUL & $NUL                         'build textstring for buttons
      CONTROL SEND hDlg, %ID_TOOLBAR, %TB_ADDSTRING, 0, STRPTR(s)                'add text to buttons
      CONTROL SEND hDlg, %ID_TOOLBAR, %TB_SETROWS, MAKLNG(6, 0), VARPTR(gTBBRC)  'rc gets size of a button
     
    '-------------------------------------------------------------------
    ' Build popup toolbar (non-visible at this stage)
    ' Here I borrow buttons from tbb array above, but should
    ' of course be own, uniqe ones. This is just a demo, so..
    '-------------------------------------------------------------------
      ghPopupTBar = CreateToolbarEx(hDlg, %WS_CHILD OR %WS_THICKFRAME OR _
                                     %CCS_NORESIZE OR %CCS_NODIVIDER, _
                                     %ID_POPUPTB, 26, %HINST_COMMCTRL, %IDB_STD_LARGE_COLOR, _
                                     tbb(0), 2, 0, 0, 0, 0, LEN(TBBUTTON))
      CALL SetWindowLong(ghPopupTBar, %GWL_STYLE, _
           GetWindowLong(ghPopupTBar, %GWL_STYLE) OR %TBSTYLE_FLAT)  'set flat style
      
      CONTROL SEND hDlg, %ID_POPUPTB, %TB_GETITEMRECT, 0, VARPTR(rc) 'get size of first button
      SetWindowPos ghPopupTBar, 0, 0, 0, _                           'resize toolbar to buttons
                    2 * rc.nRight + 7, _                             '2 buttons + some for edges
                    rc.nBottom + 7, _
                    %SWP_NOMOVE OR %SWP_NOZORDER
    '-------------------------------------------------------------------
     
      DIALOG SHOW MODAL hDlg CALL DlgCallback
     
    END FUNCTION
     
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    ' Main Callback procedure
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
    CALLBACK FUNCTION DlgCallback
       SELECT CASE CBMSG
          CASE %WM_INITDIALOG
             LOCAL rc AS RECT
     
          CASE %WM_CTLCOLORDLG
             FUNCTION = GetSysColorBrush(%COLOR_3DSHADOW) 'set dialog color
     
          CASE %WM_SIZE
             MoveWindow ghTBar, -2, -2, gTBBRC.nRight + 7, HIWRD(CBLPARAM) + 4, 0
     
          CASE %WM_LBUTTONDOWN                     'mouse click anywhere in dialog
             IF IsWindowVisible(ghPopupTBar) THEN  'if popup is visible
                ShowWindow ghPopupTBar, %SW_HIDE   'hide it and..
                SendMessage ghTBar, %TB_CHECKBUTTON, %ID_TOOL, MAKLNG(0, 0) '.. pop up pressed button
             END IF
     
          CASE %WM_COMMAND
             SELECT CASE LOWRD(CBWPARAM)
                CASE %ID_NEW                                        'New clicked
                   BEEP : SendMessage CBHNDL, %WM_LBUTTONDOWN, 0, 0 'pass on to %WM_LBUTTONDOWN
     
                CASE %ID_OPEN                                       'Open clicked
                   BEEP : SendMessage CBHNDL, %WM_LBUTTONDOWN, 0, 0 'pass on to %WM_LBUTTONDOWN
     
                CASE %ID_TOOL
                   IF (GetKeyState(%VK_SPACE) AND &H8000) THEN      'trap and act on spacebar
                      SendMessage ghTBar, %TB_SETSTATE, %ID_TOOL, _
                                  MAKLNG(%TBSTATE_CHECKED OR %TBSTATE_ENABLED, 0)
                      SetFocus ghPopupTBar
                   END IF
     
                   IF (SendMessage(ghTBar, %TB_GETSTATE, %ID_TOOL, 0) AND %TBSTATE_CHECKED) THEN 
                      SendMessage ghTBar, %TB_GETITEMRECT, 3, VARPTR(rc)               'get button's position
                      SetWindowPos ghPopupTBar, 0, rc.nRight + 4, rc.nTop - 3, 0, 0, _ 'move popup there
                                   %SWP_NOSIZE OR %SWP_NOZORDER
                      ShowWindow ghPopupTBar, %SW_SHOW                                 'and show it
                   ELSE
                      SendMessage CBHNDL, %WM_LBUTTONDOWN, 0, 0   'else, pass on to %WM_LBUTTONDOWN
                   END IF
     
                CASE %IDCANCEL : DIALOG END CBHNDL
             END SELECT
       END SELECT
    END FUNCTION

    ------------------
Working...
X