Code to View/Hide Status Bar in SDI and MDI Applications
Ever wanted to change the "View/Hide Status Bar" menu option so that the application (main) window changes its height accordingly preserving the size of the visible client area?
Here's a little handler for the OnViewStatusBar message handler to perform this task. Versions for MFC or Non-MFC available.
//
// OnViewStatusBar handler
//
// increase or decrease app window height to adapt to
// visible or invisible status bar
//
void CMainFrame::OnViewStatusBar() // MFC version
// by Volker Bartheld
{
CControlBar* pBar = GetControlBar(AFX_IDW_STATUS_BAR);
if (pBar != NULL)
{
RECT AppWinRect, BarRect;
GetWindowRect(&AppWinRect);
pBar->GetWindowRect(&BarRect);
int iBarHeight = BarRect.bottom - BarRect.top;
BOOL bShow = (pBar->GetStyle() & WS_VISIBLE) == 0;
ShowControlBar(pBar, bShow, FALSE);
if (bShow)
{
// ... increase frame
SetWindowPos(&CWnd::wndNoTopMost,
AppWinRect.top, AppWinRect.left,
AppWinRect.right-AppWinRect.left, AppWinRect.bottom-
AppWinRect.top+iBarHeight,
SWP_NOMOVE);
}
else
{
// ... decrease frame
SetWindowPos(&CWnd::wndNoTopMost,
AppWinRect.top, AppWinRect.left,
AppWinRect.right-AppWinRect.left, AppWinRect.bottom-AppWinRect.top-
iBarHeight,
SWP_NOMOVE);
}
}
}
void CMainFrame::OnViewStatusBar() // non-MFC-version
// by Alexander Sailer
{
// MFC StatusbarHandler aufrufen
OnBarCheck(ID_VIEW_STATUS_BAR);
CControlBar* pBar = NULL;
BOOL bVisible(false);
RECT AppWinRect, BarRect;
int iBarHeight(0);
// get ptr to status bar
pBar = GetControlBar(ID_VIEW_STATUS_BAR);
ASSERT(pBar);
// Abme_ungen holen
GetWindowRect(&AppWinRect);
pBar->GetWindowRect(&BarRect);
iBarHeight = BarRect.bottom - BarRect.top;
// Abfrage ob Bar sichtbar ist
bVisible = pBar->IsVisible();
if (bVisible)// ... increase frame
{
SetWindowPos(&CWnd::wndNoTopMost,
AppWinRect.top, AppWinRect.left,
AppWinRect.right-AppWinRect.left,
AppWinRect.bottom-AppWinRect.top+iBarHeight,
SWP_NOMOVE);
}
else // ... decrease frame
{
SetWindowPos(&CWnd::wndNoTopMost,
AppWinRect.top, AppWinRect.left,
AppWinRect.right-AppWinRect.left,
AppWinRect.bottom-AppWinRect.top-iBarHeight,
SWP_NOMOVE);
}
}
Downloads
Download source - 1 KbThis article was originally published on August 19, 2000