void CMainFrame::OnShowFullScreen()
{
bFullScreen_ ^= 1;
CXTPPropExchangeXMLNode px(FALSE, 0, _T("Settings"));
CXTPPropExchangeXMLNode* pxLayoutSave = DYNAMIC_DOWNCAST(CXTPPropExchangeXMLNode, px.GetSection(_T("FullScreenLayout")));
ASSERT(pxLayoutSave);
// Save current layout
if (pxLayoutSave != 0)
{
ExchangeLayout(pxLayoutSave, FALSE);
}
// If Full screen layout exists
if (pFullScreenLayout_.get() && pFullScreenLayout_->IsSectionExists(_T("CommandBars")))
{
// Set it
pFullScreenLayout_->SetLoading(TRUE);
ExchangeLayout(pFullScreenLayout_.get(), FALSE);
}
// Else create new fullscreen layout. Hide all toolbars and DockingPanes.
else
{
for (int i = 0; i < GetCommandBars()->GetCount(); i++)
{
CXTPToolBar* pToolBar = GetCommandBars()->GetAt(i);
pToolBar->SetVisible(/*(pToolBar->GetType() == xtpBarTypeMenuBar) || */(pToolBar->GetBarID() == IDR_TOOLBAR_FULLSCREEN));
if (pToolBar->IsVisible()) {
CXTPEmptyRect rect;
GetCommandBars()->DockCommandBar(pToolBar, rect, GetCommandBars()->GetDockBar(xtpBarTop));
}
}
_paneManager.CloseAll();
}
// Save old layout
pFullScreenLayout_.reset(pxLayoutSave);
if (bFullScreen_)
{
GetWindowRect(&rcMainFrame_);
ModifyStyle(WS_CAPTION|WS_THICKFRAME, 0);
// Now resize the main window
CRect rcScreen = XTPMultiMonitor()->GetScreenArea(this);
int cxBorder = ::GetSystemMetrics(SM_CXBORDER);
int cyBorder = ::GetSystemMetrics(SM_CYBORDER);
SetWindowPos(NULL, rcScreen.left - cxBorder, rcScreen.top - cyBorder,
rcScreen.Width() + cxBorder * 2, rcScreen.Height() + cyBorder * 2, SWP_NOZORDER);
m_wndStatusBar.ShowWindow(SW_HIDE);
}
else
{
ModifyStyle(0, WS_CAPTION|WS_THICKFRAME);
MoveWindow(&rcMainFrame_);
m_wndStatusBar.ShowWindow(SW_SHOW);
}
RecalcLayout(TRUE);
}