来源:MSDN 翻译整理:
冰点工作室 小鹰下载本文示例源代码
这是工作室为实现全屏显示所发集的一个演示程序。你可以通过选择全屏显示菜单选项时看到相应的效果。这段代码包括两个内容:全屏显示,浮动工具条(用于恢复操作)。
下图便是全屏状态和用于切换的浮动工具条
具体实现步骤:
以下的代码被添加到CmainFrame类中。这里是使用到的四个消息以及他们的简要说明:
1. OnViewFullScreen:全屏显示菜单项的句柄。
2. OnGetMinMaxInfo:捕获 WM_GETMINMAXINFO消息来让你改变窗体大小。
3. IsFullScreen:测试程序是否是以全屏模式显示。
4. OnUpdateViewFullScreen:根据程序模式显示选中或不选中全屏显示菜单项。
主要代码举例:
void CMainFrame::OnViewFullScreen()
{
RECT rectDesktop;
WINDOWPLACEMENT wpNew;
if (!IsFullScreen())
{
// 需要所有状态栏
m_wndStatusBar.ShowWindow(SW_HIDE);
m_wndToolBar.ShowWindow(SW_HIDE);
// 还需要恢复原状
GetWindowPlacement (&m_wpPrev);
m_wpPrev.length = sizeof m_wpPrev;
//通过调节RECT 来确定新窗口的大小
::GetWindowRect ( ::GetDesktopWindow(), &rectDesktop );
::AdjustWindowRectEx(&rectDesktop, GetStyle(), TRUE, GetExStyle());
// 把参数用于 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; //创建失败
}
//不允许工具栏停靠
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);
}
(全文完)