程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 在MFC程序中添加全屏顯示功能

在MFC程序中添加全屏顯示功能

編輯:關於VC++

這是工作室為實現全屏顯示所發集的一個演示程序。你可以通過選擇全屏顯示菜單選項時看到相應的效果。這段代碼包括兩個內容:全屏顯示,浮動工具條(用於恢復操作)。

下圖便是全屏狀態和用於切換的浮動工具條

具體實現步驟:

以下的代碼被添加到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);
}

本文配套源碼

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved