1) 在CMainFrame类中,增加如下三个成员变量。
  class CMainFrame : public CFrameWnd
  { private: //自己添加的三个成员变量
  WINDOWPLACEMENT m_OldWndPlacement; //用来保存原窗口位置
  BOOL m_bFullScreen; //全屏显示标志
  CRect m_FullScreenRect; //表示全屏显示时的窗口位置
  protected: CMainFrame();
  DECLARE_DYNCREATE(CMainFrame)}
  2)在资源编辑器中编辑菜单IDR_MAINFRAME。在“View”菜单栏下添加菜单项“Full Screen”。在其属性框中,ID设置为ID_FULL_SCREEN,Caption为“Full Screen”。还可以在工具栏中添加新的工具图标,并使之与菜单项“Full Screen”相关联,即将其ID值也设置为ID_FULL_SCREEN。
  3)设计全屏显示处理函数,在CMainFrame类增加上述菜单项ID_FULL_SCREEN消息的响应函数。响应函数如下:
  void CMainFrame::OnFullScreen() 
  {GetWindowPlacement(&m_OldWndPlacement);
  CRect WindowRect;
  GetWindowRect(&WindowRect);
  CRect ClientRect;
  RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &ClientRect);
  ClientToScreen(&ClientRect);
  // 获取屏幕的分辨率
  int nFullWidth=GetSystemMetrics(SM_CXSCREEN);
  int nFullHeight=GetSystemMetrics(SM_CYSCREEN);
  // 将除控制条外的客户区全屏显示到从(0,0)到(nFullWidth, nFullHeight)区域, 将(0,0)和(nFullWidth, nFullHeight)两个点外扩充原窗口和除控制条之外的 客户区位置间的差值, 就得到全屏显示的窗口位置
  m_FullScreenRect.left=WindowRect.left-ClientRect.left;
  m_FullScreenRect.top=WindowRect.top-ClientRect.top;
  m_FullScreenRect.right=WindowRect.right-ClientRect.right+nFullWidth;
  m_FullScreenRect.bottom=WindowRect.bottom-ClientRect.bottom+nFullHeight;
  m_bFullScreen=TRUE; // 设置全屏显示标志为 TRUE
  // 进入全屏显示状态
  WINDOWPLACEMENT wndpl;
  wndpl.length=sizeof(WINDOWPLACEMENT);
  wndpl.flags=0;
  wndpl.showCmd=SW_SHOWNORMAL;
  wndpl.rcNormalPosition=m_FullScreenRect;
  SetWindowPlacement(&wndpl);}
  4)重载CMainFrame类的OnGetMinMaxInfo函数,在全屏显示时提供全屏显示的位置信息。
  void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
  {if(m_bFullScreen)
  {lpMMI->ptMaxSize.x=m_FullScreenRect.Width();
  lpMMI->ptMaxSize.y=m_FullScreenRect.Height();
  lpMMI->ptMaxPosition.x=m_FullScreenRect.Width();
  lpMMI->ptMaxPosition.y=m_FullScreenRect.Height();
  // 最大的Track尺寸也要改变
  lpMMI->ptMaxTrackSize.x=m_FullScreenRect.Width();
  lpMMI->ptMaxTrackSize.y=m_FullScreenRect.Height();
  }CFrameWnd::OnGetMinMaxInfo(lpMMI) ;
  }

解决方案 »

  1.   

    1.BOOL CMainFrame::PreCreateWindow ( CREATESTRUCT & cs )
     {
        cs.hMenu = NULL;
        return CFrameWnd::PreCreateWindow ( cs );
     }
    2.CMainFrame* pFrame = ( CMainFrame* )(AfxGetApp ()->m_pMainwnd );
      pFrame->Modify ( WS_CAPTION , 0 );
      pFrame->Modify ( WS_THICKFRAME , 0 );
      pFrame->SetMenu ( NULL );
      pFrame->ShowWindow ( WS_MAXIMIZE );其他的简单代码可以自己写的。
      

  2.   

    为MFC应用程序添加全屏幕显示功能  在CMainFrame类中添加下列成员变量和成员函数(使用ClassWizard),下面是这些变量和函数的功能说明:成员变量:
        BOOL m_bFullScreen; //全屏幕显示标志
        CRect m_FullScreenWindowRect; //全屏幕显示窗口Rect
        WINDOWPLACEMENT m_wpPrev; //用于保存正常视图时的窗口位置信息
        CToolBar * m_wndFullScreenBar; //全屏幕显示时的浮动工具条成员函数:
        void OnMenuFullscreen(); //全屏幕显示的处理函数
        void OnGetMinMaxInfo(); //捕获WM_GETMINMAXINFO消息以便允许你增加窗口大小
        void OnUpdateViewFullScreen(); //更新“全屏幕显示”菜单的状态源码void CMainFrame::OnMenuFullscreen()
    {//全屏幕显示的处理函数
        RECT rectDesktop;
        WINDOWPLACEMENT wpNew;    if (m_bFullScreen)
        {//全屏幕显示模式
            //隐藏工具条和状态条
            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());        //保存RECT以便OnGetMinMaxInfo()使用
            m_FullScreenWindowRect = rectDesktop;        wpNew = m_wpPrev;
            wpNew.showCmd = SW_SHOWNORMAL;
            wpNew.rcNormalPosition = rectDesktop;        //生成新的工具条
            m_wndFullScreenBar=new CToolBar;        if(!m_wndFullScreenBar->Create(this, CBRS_SIZE_DYNAMIC|CBRS_FLOATING)
                    || !m_wndFullScreenBar->LoadToolBar(IDR_FULLSCREEN))
            {
                TRACE0("Failed to create toolbar\n");
                return; // fail to create
            }        //不允许工具条停泊
            m_wndFullScreenBar->EnableDocking(FALSE);
            m_wndFullScreenBar->SetWindowPos(0,100,100,0,0,SWP_NOSIZE
                    |SWP_NOZORDER|SWP_NOACTIVATE|SWP_SHOWWINDOW);
            m_wndFullScreenBar->SetWindowText(_T("全屏幕显示"));
            FloatControlBar(m_wndFullScreenBar, CPoint(100,100));
            m_bFullScreen=TRUE;
        }
        else
        {//正常显示模式
            //删除全屏幕工具条
            m_wndFullScreenBar->DestroyWindow();
            delete m_wndFullScreenBar;        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 (m_bFullScreen)
        {
            lpMMI->ptMaxSize.y = m_FullScreenWindowRect.Height();
            lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y;
            lpMMI->ptMaxSize.x = m_FullScreenWindowRect.Width();
            lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x;
        }
    }void CMainFrame::OnUpdateMenuFullscreen(CCmdUI* pCmdUI)
    {//更新菜单的状态
        pCmdUI->Enable();
        pCmdUI->SetCheck(m_bFullScreen);