在MFC程序中添加全屏顯示功能
來源:MSDN 翻譯整理:冰點(diǎn)工作室 小鷹下載本文示例源代碼
這是工作室為實(shí)現(xiàn)全屏顯示所發(fā)集的一個(gè)演示程序。你可以通過選擇全屏顯示菜單選項(xiàng)時(shí)看到相應(yīng)的效果。這段代碼包括兩個(gè)內(nèi)容:全屏顯示,浮動(dòng)工具條(用于恢復(fù)操作)。
下圖便是全屏狀態(tài)和用于切換的浮動(dòng)工具條
具體實(shí)現(xiàn)步驟:
以下的代碼被添加到CmainFrame類中。這里是使用到的四個(gè)消息以及他們的簡要說明:
1. OnViewFullScreen:全屏顯示菜單項(xiàng)的句柄。
2. OnGetMinMaxInfo:捕獲 WM_GETMINMAXINFO消息來讓你改變窗體大小。
3. IsFullScreen:測試程序是否是以全屏模式顯示。
4. OnUpdateViewFullScreen:根據(jù)程序模式顯示選中或不選中全屏顯示菜單項(xiàng)。
主要代碼舉例:
void CMainFrame::OnViewFullScreen() { RECT rectDesktop; WINDOWPLACEMENT wpNew; if (!IsFullScreen()) { // 需要所有狀態(tài)欄 m_wndStatusBar.ShowWindow(SW_HIDE); m_wndToolBar.ShowWindow(SW_HIDE); // 還需要恢復(fù)原狀 GetWindowPlacement (&m_wpPrev); m_wpPrev.length = sizeof m_wpPrev; //通過調(diào)節(jié)RECT 來確定新窗口的大小 ::GetWindowRect ( ::GetDesktopWindow(), &rectDesktop ); ::AdjustWindowRectEx(&rectDesktop, GetStyle(), TRUE, GetExStyle()); // 把參數(shù)用于 OnGetMinMaxInfo() m_FullScreenWindowRect = rectDesktop; wpNew = m_wpPrev; wpNew.showCmd = SW_SHOWNORMAL; wpNew.rcNormalPosition = rectDesktop; // 創(chuàng)建新的工具欄 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; //創(chuàng)建失敗 } //不允許工具欄??? 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; //恢復(fù)窗體 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; } }//測試窗體狀態(tài)
BOOL CMainFrame::IsFullScreen() { return m_bFullScreen; }//是否選中菜單
void CMainFrame::OnUpdateViewFullScreen(CCmdUI* pCmdUI) { pCmdUI->Enable(); if (IsFullScreen()) pCmdUI->SetCheck(); else pCmdUI->SetCheck(0); }(全文完)
posted on 2006-06-22 17:10 楊粼波 閱讀(458) 評論(0) 編輯 收藏 引用 所屬分類: 文章收藏