Code to View/Hide Status Bar in SDI and MDI Applications

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

Ever wanted to change the "View/Hide Status Bar"
menue option so that the application (main) window changes it’s
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 Kb

More by Author

Previous article
Next article

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read