Page 3 of 3

Re: [5.60b1] Static control over client area?!

Posted: Thu Feb 02, 2017 11:46 pm
by kenmo
Fred, it is no fun to revert hard work, but thanks for doing it if it prevents unintended side effects!

Thanks for the reminder, normeus :)

Re: [5.60b1] Static control over client area?!

Posted: Fri Feb 03, 2017 6:20 pm
by chi
@Fred: Have you tried using WM_NCCALCSIZE to shift menu, toolbar and statusbar? Here is an example that works pretty well :twisted:

(except for the ShowWindow -> Minimize + Maximize part, to trigger WM_NCCALCSIZE in a maximized state... That's kinda ugly)
(also needs extra calculations with AeroSnap enabled which are not implemented yet...)
(and in fullscreen the statusbar is wrongly positioned when its activated before the toolbar)

Code: Select all

Global oldProc, offset

Procedure WndCallback(hWnd, Msg, wParam, lParam)
  Select Msg
    Case #WM_NCCALCSIZE
      Protected ret = DefWindowProc_(hWnd, Msg, wParam, lParam)
      If wParam = 0 : ProcedureReturn 0 : EndIf
      If offset
        Protected *ncc.NCCALCSIZE_PARAMS = lParam
        GetWindowRect_(hWnd, wRect.RECT)
        GetClientRect_(hWnd, cRect.RECT)
        MapWindowPoints_(hWnd, 0, cRect, 2)
        If *ncc\lppos
          *ncc\rgrc[2]\left   = cRect\left
          *ncc\rgrc[2]\top    = cRect\top - offset
          *ncc\rgrc[2]\right  = cRect\right
          *ncc\rgrc[2]\bottom = cRect\bottom
        EndIf
      EndIf
      ProcedureReturn ret
  EndSelect
  ProcedureReturn CallWindowProc_(oldProc, hWnd, Msg, wParam, lParam)
EndProcedure

OpenWindow(0, 0, 0, 800, 500, "demo by chi  : ) ", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
oldProc = SetWindowLongPtr_(WindowID(0), #GWL_WNDPROC, @WndCallback())

ButtonGadget(0, 10, 10, 100, 30, "Toggle Toolbar")
ButtonGadget(1, 110, 10, 100, 30, "Toggle Menu")
ButtonGadget(2, 210, 10, 100, 30, "Toggle Statusbar")
ListViewGadget(3, 10, 50, WindowWidth(0)-20, WindowHeight(0)-60)

HideWindow(0, #False)

Repeat
  event = WaitWindowEvent()
  Select event
    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case 0 ; "Toggle Toolbar"
          
          If IsToolBar(0) = 0
            CreateToolBar(0, WindowID(0))
            ToolBarStandardButton(0, #PB_ToolBarIcon_New)
            ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
            ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
            offset = ToolBarHeight(0)
            If IsZoomed_(WindowID(0)) = 0
              SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + offset, #SWP_NOMOVE|#SWP_NOZORDER)
            Else
              GetWindowPlacement_(WindowID(0), wp.WINDOWPLACEMENT)
              wp\rcNormalPosition\bottom + offset
              SetWindowPlacement_(WindowID(0), wp)
              offset/2
              ShowWindow_(WindowID(0), #SW_SHOWMINIMIZED)
              ShowWindow_(WindowID(0), #SW_SHOWMAXIMIZED)
            EndIf
          Else
            offset = -ToolBarHeight(0)
            FreeToolBar(0)
            If IsZoomed_(WindowID(0)) = 0
              SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + offset, #SWP_NOMOVE|#SWP_NOZORDER)
            Else
              GetWindowPlacement_(WindowID(0), wp.WINDOWPLACEMENT)
              wp\rcNormalPosition\bottom + offset
              SetWindowPlacement_(WindowID(0), wp)
              offset/2
              ShowWindow_(WindowID(0), #SW_SHOWMINIMIZED)
              ShowWindow_(WindowID(0), #SW_SHOWMAXIMIZED)
            EndIf
          EndIf
          offset = 0
          
        Case 1 ; "Toggle Menu"
          
          If IsMenu(0) = 0
            CreateMenu(0, WindowID(0))
            MenuTitle("  File  ")
            If IsZoomed_(WindowID(0)) = 0
              SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + MenuHeight(), #SWP_NOMOVE|#SWP_NOZORDER)
            Else
              GetWindowPlacement_(WindowID(0), wp.WINDOWPLACEMENT)
              wp\rcNormalPosition\bottom + MenuHeight()
              SetWindowPlacement_(WindowID(0), wp)
              ShowWindow_(WindowID(0), #SW_SHOWMINIMIZED)
              ShowWindow_(WindowID(0), #SW_SHOWMAXIMIZED)
            EndIf
          Else
            If IsZoomed_(WindowID(0)) = 0
              SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) - MenuHeight(), #SWP_NOMOVE|#SWP_NOZORDER)
            Else
              GetWindowPlacement_(WindowID(0), wp.WINDOWPLACEMENT)
              wp\rcNormalPosition\bottom - MenuHeight()
              SetWindowPlacement_(WindowID(0), wp)
              ShowWindow_(WindowID(0), #SW_SHOWMINIMIZED)
              ShowWindow_(WindowID(0), #SW_SHOWMAXIMIZED)
            EndIf
            FreeMenu(0)
          EndIf
          
        Case 2 ; "Toggle Statusbar"
          
          If IsStatusBar(0) = 0
            CreateStatusBar(0, WindowID(0))
            If IsZoomed_(WindowID(0)) = 0
              SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + StatusBarHeight(0), #SWP_NOMOVE|#SWP_NOZORDER)
            Else
              GetWindowPlacement_(WindowID(0), wp.WINDOWPLACEMENT)
              wp\rcNormalPosition\bottom + StatusBarHeight(0)
              SetWindowPlacement_(WindowID(0), wp)
              ShowWindow_(WindowID(0), #SW_SHOWMINIMIZED)
              ShowWindow_(WindowID(0), #SW_SHOWMAXIMIZED)
            EndIf
          Else
            If IsZoomed_(WindowID(0)) = 0
              SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) - StatusBarHeight(0), #SWP_NOMOVE|#SWP_NOZORDER)
            Else
              GetWindowPlacement_(WindowID(0), wp.WINDOWPLACEMENT)
              wp\rcNormalPosition\bottom - StatusBarHeight(0)
              SetWindowPlacement_(WindowID(0), wp)
              ShowWindow_(WindowID(0), #SW_SHOWMINIMIZED)
              ShowWindow_(WindowID(0), #SW_SHOWMAXIMIZED)
            EndIf
            FreeStatusBar(0)
          EndIf
          
      EndSelect
  EndSelect
Until event = #PB_Event_CloseWindow


Re: [5.60b1] Static control over client area?!

Posted: Fri Feb 03, 2017 11:50 pm
by chi
little update:
  • · fixed fullscreen statusbar
    · implemented a quick AeroSnap detection (still buggy)

Code: Select all

Global oldProc, offset

Procedure WndCallback(hWnd, Msg, wParam, lParam)
  Select Msg
    Case #WM_NCCALCSIZE
      Protected ret = DefWindowProc_(hWnd, Msg, wParam, lParam)
      If wParam = 0 : ProcedureReturn 0 : EndIf
      If offset
        Protected *ncc.NCCALCSIZE_PARAMS = lParam
        GetClientRect_(hWnd, cRect.RECT)
        MapWindowPoints_(hWnd, 0, cRect, 2)
        If *ncc\lppos
          *ncc\rgrc[2]\left   = cRect\left
          *ncc\rgrc[2]\top    = cRect\top - offset
          *ncc\rgrc[2]\right  = cRect\right
          *ncc\rgrc[2]\bottom = cRect\bottom
        EndIf
      EndIf
      ProcedureReturn ret
  EndSelect
  ProcedureReturn CallWindowProc_(oldProc, hWnd, Msg, wParam, lParam)
EndProcedure

Procedure IsAeroSnapEnabled()
  deskWidth  = GetSystemMetrics_(0)
  deskHeight = GetSystemMetrics_(1)
  If WindowWidth(0, #PB_Window_FrameCoordinate) = deskWidth/2
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

OpenWindow(0, 0, 0, 800, 500, "demo by chi  : ) ", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
oldProc = SetWindowLongPtr_(WindowID(0), #GWL_WNDPROC, @WndCallback())

ButtonGadget(0, 10, 10, 100, 30, "Toggle Toolbar")
ButtonGadget(1, 110, 10, 100, 30, "Toggle Menu")
ButtonGadget(2, 210, 10, 100, 30, "Toggle Statusbar")
ListViewGadget(3, 10, 50, WindowWidth(0)-20, WindowHeight(0)-60)

HideWindow(0, #False)

Repeat
  event = WaitWindowEvent()
  Select event
    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case 0 ; "Toggle Toolbar"
          
          If IsToolBar(0) = 0
            CreateToolBar(0, WindowID(0))
            ToolBarStandardButton(0, #PB_ToolBarIcon_New)
            ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
            ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
            offset = ToolBarHeight(0)
            If IsZoomed_(WindowID(0)) = 0
              If IsAeroSnapEnabled() = 0
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + offset, #SWP_NOMOVE|#SWP_NOZORDER)
              Else
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + 1 , #SWP_NOMOVE|#SWP_NOZORDER)
                offset = 0
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) - 1 , #SWP_NOMOVE|#SWP_NOZORDER)
              EndIf
            Else
              wp.WINDOWPLACEMENT\Length = SizeOf(WINDOWPLACEMENT)
              GetWindowPlacement_(WindowID(0), wp)
              wp\rcNormalPosition\bottom + offset
              SetWindowPlacement_(WindowID(0), wp)
              offset/2
              ShowWindow_(WindowID(0), #SW_SHOWMINIMIZED)
              ShowWindow_(WindowID(0), #SW_SHOWMAXIMIZED)
            EndIf
          Else
            offset = -ToolBarHeight(0)
            FreeToolBar(0)
            If IsZoomed_(WindowID(0)) = 0
              If IsAeroSnapEnabled() = 0
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + offset, #SWP_NOMOVE|#SWP_NOZORDER)
              Else
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + 1 , #SWP_NOMOVE|#SWP_NOZORDER)
                offset = 0
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) - 1 , #SWP_NOMOVE|#SWP_NOZORDER)
              EndIf
            Else
              wp.WINDOWPLACEMENT\Length = SizeOf(WINDOWPLACEMENT)
              GetWindowPlacement_(WindowID(0), wp)
              wp\rcNormalPosition\bottom + offset
              SetWindowPlacement_(WindowID(0), wp)
              offset/2
              ShowWindow_(WindowID(0), #SW_SHOWMINIMIZED)
              ShowWindow_(WindowID(0), #SW_SHOWMAXIMIZED)
            EndIf
          EndIf
          If IsStatusBar(0) And IsZoomed_(WindowID(0))
            If IsMenu(0)
              menuheight = MenuHeight()
            Else
              menuheight = 0
            EndIf
            SetWindowPos_(StatusBarID(0), #HWND_TOP, 0, WindowHeight(0) - menuheight - StatusBarHeight(0), 0, 0, #SWP_NOSIZE|#SWP_NOZORDER)
          EndIf
          offset = 0
          
        Case 1 ; "Toggle Menu"
          
          If IsMenu(0) = 0
            CreateMenu(0, WindowID(0))
            MenuTitle("  File  ")
            If IsZoomed_(WindowID(0)) = 0
              If IsAeroSnapEnabled() = 0
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + MenuHeight(), #SWP_NOMOVE|#SWP_NOZORDER)
              Else
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + 1 , #SWP_NOMOVE|#SWP_NOZORDER)
                offset = 0
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) - 1 , #SWP_NOMOVE|#SWP_NOZORDER)
              EndIf
            Else
              wp.WINDOWPLACEMENT\Length = SizeOf(WINDOWPLACEMENT)
              GetWindowPlacement_(WindowID(0), wp)
              wp\rcNormalPosition\bottom + MenuHeight()
              SetWindowPlacement_(WindowID(0), wp)
              ShowWindow_(WindowID(0), #SW_SHOWMINIMIZED)
              ShowWindow_(WindowID(0), #SW_SHOWMAXIMIZED)
            EndIf
          Else
            If IsZoomed_(WindowID(0)) = 0
              If IsAeroSnapEnabled() = 0
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) - MenuHeight(), #SWP_NOMOVE|#SWP_NOZORDER)
              Else
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + 1 , #SWP_NOMOVE|#SWP_NOZORDER)
                offset = 0
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) - 1 , #SWP_NOMOVE|#SWP_NOZORDER)
              EndIf
            Else
              wp.WINDOWPLACEMENT\Length = SizeOf(WINDOWPLACEMENT)
              GetWindowPlacement_(WindowID(0), wp)
              wp\rcNormalPosition\bottom - MenuHeight()
              SetWindowPlacement_(WindowID(0), wp)
              ShowWindow_(WindowID(0), #SW_SHOWMINIMIZED)
              ShowWindow_(WindowID(0), #SW_SHOWMAXIMIZED)
            EndIf
            FreeMenu(0)
          EndIf
          
        Case 2 ; "Toggle Statusbar"
          
          If IsStatusBar(0) = 0
            CreateStatusBar(0, WindowID(0))
            If IsZoomed_(WindowID(0)) = 0
              If IsAeroSnapEnabled() = 0
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + StatusBarHeight(0), #SWP_NOMOVE|#SWP_NOZORDER)
              Else
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + 1 , #SWP_NOMOVE|#SWP_NOZORDER)
                offset = 0
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) - 1 , #SWP_NOMOVE|#SWP_NOZORDER)
              EndIf
            Else
              wp.WINDOWPLACEMENT\Length = SizeOf(WINDOWPLACEMENT)
              GetWindowPlacement_(WindowID(0), wp)
              wp\rcNormalPosition\bottom + StatusBarHeight(0)
              SetWindowPlacement_(WindowID(0), wp)
              ShowWindow_(WindowID(0), #SW_SHOWMINIMIZED)
              ShowWindow_(WindowID(0), #SW_SHOWMAXIMIZED)
            EndIf
          Else
            If IsZoomed_(WindowID(0)) = 0
              If IsAeroSnapEnabled() = 0
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) - StatusBarHeight(0), #SWP_NOMOVE|#SWP_NOZORDER)
              Else
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + 1 , #SWP_NOMOVE|#SWP_NOZORDER)
                offset = 0
                SetWindowPos_(WindowID(0), #HWND_TOP, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) - 1 , #SWP_NOMOVE|#SWP_NOZORDER)
              EndIf
            Else
              wp.WINDOWPLACEMENT\Length = SizeOf(WINDOWPLACEMENT)
              GetWindowPlacement_(WindowID(0), wp)
              wp\rcNormalPosition\bottom - StatusBarHeight(0)
              SetWindowPlacement_(WindowID(0), wp)
              ShowWindow_(WindowID(0), #SW_SHOWMINIMIZED)
              ShowWindow_(WindowID(0), #SW_SHOWMAXIMIZED)
            EndIf
            FreeStatusBar(0)
          EndIf
          
      EndSelect
  EndSelect
Until event = #PB_Event_CloseWindow


Re: [5.60b1] Static control over client area?!

Posted: Tue Feb 07, 2017 8:57 am
by Fred
Interesting code, thanks ! May be for next time :).

Re: [5.60b1] Static control over client area?!

Posted: Sun Jan 07, 2018 11:55 pm
by chi
... and now it works ;)

Code: Select all

Global oldProc, offset

Procedure WndCallback(hWnd, Msg, wParam, lParam)
  Select Msg
      
    Case #WM_NCCALCSIZE
      Protected ret = DefWindowProc_(hWnd, Msg, wParam, lParam)
      If wParam = 0 : ProcedureReturn 0 : EndIf
      If offset
        Protected *ncc.NCCALCSIZE_PARAMS = lParam
        GetClientRect_(hWnd, cRect.RECT)
        MapWindowPoints_(hWnd, 0, cRect, 2)
        If *ncc\lppos
          *ncc\rgrc[2]\left   = cRect\left
          *ncc\rgrc[2]\top    = cRect\top - offset
          *ncc\rgrc[2]\right  = cRect\right
          *ncc\rgrc[2]\bottom = cRect\bottom
        EndIf
        offset = 0
      EndIf
      ProcedureReturn ret
      
  EndSelect
  ProcedureReturn CallWindowProc_(oldProc, hWnd, Msg, wParam, lParam)
EndProcedure

Procedure AdjustWindowHeight(Window, Height)
  If IsZoomed_(WindowID(Window))
    wp.WINDOWPLACEMENT\Length = SizeOf(WINDOWPLACEMENT)
    GetWindowPlacement_(WindowID(Window), wp)
    wp\rcNormalPosition\bottom + Height
    SetWindowPlacement_(WindowID(Window), wp)
  Else
    ResizeWindow(Window, #PB_Ignore, #PB_Ignore, #PB_Ignore, WindowHeight(Window) + Height)
  EndIf
EndProcedure

OpenWindow(0, 0, 0, 800, 500, "demo by chi  : ) ", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
oldProc = SetWindowLongPtr_(WindowID(0), #GWL_WNDPROC, @WndCallback())

;;; MENU
CreateMenu(0, WindowID(0))
MenuTitle("  File  ")
SetMenu_(WindowID(0), 0)

;;; STATUSBAR
If CreateStatusBar(0, WindowID(0))
  AddStatusBarField(100)
  AddStatusBarField(100)
  AddStatusBarField(#PB_Ignore)
  AddStatusBarField(120)
EndIf
StatusBarText(0, 0, " Status")
StatusBarText(0, 1, "")
StatusBarText(0, 2, "", #PB_StatusBar_Right )
StatusBarText(0, 3, "...", #PB_StatusBar_Center)
StatusBarProgress(0, 1, 0)
ShowWindow_(StatusBarID(0), #SW_HIDE)

;;; TOOLBAR
CreateToolBar(0, WindowID(0))
ToolBarStandardButton(0, #PB_ToolBarIcon_New)
ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
ShowWindow_(ToolBarID(0), #SW_HIDE)
; Important for toolbar to work...
SetWindowLongPtr_(ToolBarID(0),#GWL_STYLE, GetWindowLongPtr_(ToolBarID(0), #GWL_STYLE)|#CCS_NODIVIDER|#CCS_NOPARENTALIGN)
SetWindowPos_(ToolBarID(0), #HWND_TOP, 0, -ToolBarHeight(0), 0, 0, #SWP_NOSIZE|#SWP_NOZORDER|#SWP_NOACTIVATE)

ButtonGadget(0, 10, 10, 100, 30, "Toggle Menu")
ButtonGadget(1, 110, 10, 100, 30, "Toggle Toolbar")
ButtonGadget(2, 210, 10, 100, 30, "Toggle Statusbar")
ListViewGadget(3, 10, 50, WindowWidth(0)-20, WindowHeight(0)-60)

HideWindow(0, #False)

Repeat
  event = WaitWindowEvent()
  Select event
      
    Case #PB_Event_Gadget
      Select EventGadget()
          
          ;;; MENU
        Case 0
          showMenu ! 1
          If showMenu
            AdjustWindowHeight(0, MenuHeight())
            SetMenu_(WindowID(0), MenuID(0))
          Else
            SetMenu_(WindowID(0), 0)
            AdjustWindowHeight(0, -MenuHeight())
          EndIf
          
          ;;; TOOLBAR
        Case 1
          showToolbar = IsWindowVisible_(ToolBarID(0)) ! 1
          If showToolbar
            offset = ToolBarHeight(0)
            AdjustWindowHeight(0, offset)
            LockWindowUpdate_(WindowID(0))
            SetWindowPos_(WindowID(0), 0, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + 1 , #SWP_NOMOVE|#SWP_NOZORDER|#SWP_NOACTIVATE)
            SetWindowPos_(WindowID(0), 0, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) - 1 , #SWP_NOMOVE|#SWP_NOZORDER|#SWP_NOACTIVATE)
            LockWindowUpdate_(0)
            ShowWindow_(ToolBarID(0), #SW_SHOW)
          Else
            ShowWindow_(ToolBarID(0), #SW_HIDE)
            offset = -ToolBarHeight(0)
            AdjustWindowHeight(0, offset)
            SetWindowPos_(WindowID(0), 0, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) + 1 , #SWP_NOMOVE|#SWP_NOZORDER|#SWP_NOACTIVATE)
            SetWindowPos_(WindowID(0), 0, 0, 0, WindowWidth(0, #PB_Window_FrameCoordinate), WindowHeight(0, #PB_Window_FrameCoordinate) - 1 , #SWP_NOMOVE|#SWP_NOZORDER|#SWP_NOACTIVATE)
          EndIf
          SetWindowPos_(StatusBarID(0), 0, 0, 0, 0, 0, #SWP_NOMOVE|#SWP_NOZORDER|#SWP_NOACTIVATE)
          
          ;;; STATUSBAR
        Case 2
          showStatusbar ! 1
          If showStatusbar
            AdjustWindowHeight(0, StatusBarHeight(0))
            ShowWindow_(StatusBarID(0), #SW_SHOW)
          Else
            ShowWindow_(StatusBarID(0), #SW_HIDE)
            AdjustWindowHeight(0, -StatusBarHeight(0))
          EndIf
          
      EndSelect
      
  EndSelect
Until event = #PB_Event_CloseWindow