這是工作室為實現全屏顯示所發集的一個演示程序。你可以通過選擇全屏顯示菜單選項時看到相應的效果。這段代碼包括兩個內容:全屏顯示,浮動工具條(用於恢復操作)。
下圖便是全屏狀態和用於切換的浮動工具條
具體實現步驟:
以下的代碼被添加到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);
}
本文配套源碼