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);
}
}