WEB开发网
开发学院软件开发VC 在MFC程序中添加全屏显示功能 阅读

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

 2010-06-04 20:40:31 来源:WEB开发网   
核心提示:这是工作室为实现全屏显示所发集的一个演示程序,你可以通过选择全屏显示菜单选项时看到相应的效果,在MFC程序中添加全屏显示功能,这段代码包括两个内容:全屏显示,浮动工具条(用于恢复操作),2.OnGetMinMaxInfo:捕获 WM_GETMINMAXINFO消息来让你改变窗体大小,3.IsFullScreen:测试程

这是工作室为实现全屏显示所发集的一个演示程序。你可以通过选择全屏显示菜单选项时看到相应的效果。这段代码包括两个内容:全屏显示,浮动工具条(用于恢复操作)。

下图便是全屏状态和用于切换的浮动工具条

具体实现步骤:

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

本文配套源码

Tags:MFC 程序 添加

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接