Total Pageviews

Wednesday, May 12, 2010

Lesson 9 - FullScreen of CMainFrame

The sample code below has been added to the CMainFrame class of the AppWizard-generated application. Here is a list of the four functions and what they accomplish:

OnViewFullScreen - Handler for the Full Screen menu item.
OnGetMinMaxInfo - Traps the WM_GETMINMAXINFO message to allow you to increase the size of the window.
IsFullScreen- Tests whether the application is in full screen mode.
OnUpdateViewFullScreen - Checks or unchecks the Full Screen menu item depending on the mode the application is in.
Back to the top
Sample Code
void CMainFrame::OnViewFullScreen()
{
RECT rectDesktop;
WINDOWPLACEMENT wpNew;

if (!IsFullScreen())
{
// need to hide all status bars
m_wndStatusBar.ShowWindow(SW_HIDE);
m_wndToolBar.ShowWindow(SW_HIDE);

// We'll need these to restore the original state.
GetWindowPlacement (&m_wpPrev);

m_wpPrev.length = sizeof m_wpPrev;

//Adjust RECT to new size of window
::GetWindowRect ( ::GetDesktopWindow(), &rectDesktop );
::AdjustWindowRectEx(&rectDesktop, GetStyle(), TRUE,
GetExStyle());

// Remember this for OnGetMinMaxInfo()
m_FullScreenWindowRect = rectDesktop;

wpNew = m_wpPrev;
wpNew.showCmd = SW_SHOWNORMAL;
wpNew.rcNormalPosition = rectDesktop;

m_pwndFullScrnBar=new CToolBar;

if(!m_pwndFullScrnBar->Create(this,
CBRS_SIZE_DYNAMIC|CBRS_FLOATING)
|| !m_pwndFullScrnBar->LoadToolBar(IDR_FULLSCREEN))
{
TRACE0("Failed to create toolbar\n");
return; // fail to create
}

//don't allow the toolbar to dock
m_pwndFullScrnBar->EnableDocking(0);
m_pwndFullScrnBar->SetWindowPos(0,100,100,
0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_SHOWWINDOW);
m_pwndFullScrnBar->SetWindowText(_T("Full Screen"));
FloatControlBar(m_pwndFullScrnBar, CPoint(100,100));
m_bFullScreen=TRUE;
}
else
{
m_pwndFullScrnBar->DestroyWindow();
delete m_pwndFullScrnBar;

m_bFullScreen=FALSE;

m_wndStatusBar.ShowWindow(SW_SHOWNORMAL);
m_wndToolBar.ShowWindow(SW_SHOWNORMAL);
wpNew = m_wpPrev;
}

SetWindowPlacement ( &wpNew );
}

void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
if (IsFullScreen())
{
lpMMI->ptMaxSize.y = m_FullScreenWindowRect.Height();
lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y;
lpMMI->ptMaxSize.x = m_FullScreenWindowRect.Width();
lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x;
}

}

BOOL CMainFrame::IsFullScreen()
{
return m_bFullScreen;
}

void CMainFrame::OnUpdateViewFullScreen(CCmdUI* pCmdUI)
{
pCmdUI->Enable();

if (IsFullScreen())
pCmdUI->SetCheck();
else
pCmdUI->SetCheck(0);
}


CRect rcDesktop;
rcDesktop.left = GetSystemMetrics(SM_XVIRTUALSCREEN);
rcDesktop.right = rcDesktop.left + GetSystemMetrics(SM_CXVIRTUALSCREEN);
rcDesktop.top = GetSystemMetrics(SM_YVIRTUALSCREEN);
rcDesktop.bottom = rcDesktop.top + GetSystemMetrics(SM_CYVIRTUALSCREEN);
MoveWindow(rcDesktop, FALSE);

No comments:

Post a Comment