打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VC中全屏窗口的实现

 

实现全屏主要就是两个工作:
  <1>让框架窗口的客户区占满整个屏幕,
 <2> 退出全屏后恢复窗口之前的大小和位置,以实现全屏模式和非全屏模式的切换
 
  我是这样进行实现的:
 <1>在主窗口内加入三个成员变量:
  BOOL m_bFullScreen ;   //代表当前窗口的状态是否为全屏的标志
  CRect * m_pFullScreenRect ; //保存在全屏状态下时的窗口的窗口矩形
  WINDOWPLACEMENT m_OldWndPlacement ; //保存进入全屏前的窗口放置信息(大小,位置等)
 
  <2>定义进人全屏操作的函数和退出全屏操作的函数 (当然,也可以就定义一个函数)
 
  void CMainFrame::OnFullscreen()
  {
       if(m_bFullScreen)
      {
          EndFullScreen();
          return;
      }
    
      //获取并保存当前窗口的位置,以便退出全屏时进行恢复
      GetWindowPlacement(&m_OldWndPlacement);
 
      // 获取屏幕的大小
      int nFullHeight = GetSystemMetrics(SM_CYSCREEN);
      int nFullWidth = GetSystemMetrics(SM_CXSCREEN);
 
      //创建一个新的客户区区域,使它正好覆盖全屏
     CRect clientRect;
     clientRect.left = 0;
     clientRect.right = nFullWidth;
     clientRect.top = 0;
     clientRect.bottom = nFullHeight;
 
    //根据要使用的客户区区域信息计算出此客户区需要的窗口的区域信息并保存在参数内
    CalcWindowRect(&clientRect);
   
     //把窗口全屏时它的区域信息保存到成员变量中去
    m_pFullScreenRect->CopyRect(&clientRect);
    
 /*
 //调用MoveWindow操作将窗口移动到全屏对应的正确区域. 注意: 因为MoveWindow要发出 WM_GETMINMAXINFO
 //消息,通过对此消息的处理可以确认和更正窗口区域是否在最大和最小之间。因为我们要让窗口全屏,因此就要
 //在全屏时使用我们设定的窗口区域作为最大区域的判定数据,而在非全屏时,就应该使用系统默认的数据来进行
 //判定,因此应该在调用MoveWindow之前先设定全屏标志为真,以保证在处理WM_GETMINMAXINFO时使用正确的区域来进行最大化判定

 */
    MoveWindow(m_pFullScreenRect);
 
   //设定全屏标志为真
    m_bFullScreen = true;
}

// 停止全屏显示的函数
void CMainFrame::EndFullScreen(void)
{
    if(m_bFullScreen)
    {
       // hide the window
       ShowWindow(SW_HIDE);
 
       // recove the window placement
        SetWindowPlacement(&m_OldWndPlacement);
       
       // 设定全屏状态标志为假
        m_bFullScreen = false;
     }
}
 
<3>重写WM_GETMINMAXINFO消息的处理函数
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
    if(m_bFullScreen)
    {
      lpMMI->ptMaxSize.x = m_pFullScreenRect->Width();
      lpMMI->ptMaxSize.y = m_pFullScreenRect->Height();
      lpMMI->ptMaxPosition.x = m_pFullScreenRect->Width();
      lpMMI->ptMaxPosition.y = m_pFullScreenRect->Height();
      lpMMI->ptMaxTrackSize.x = m_pFullScreenRect->Width();
      lpMMI->ptMaxTrackSize.y = m_pFullScreenRect->Height();
   }
   CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
 
<4> 将GUI事件的处理和全屏函数关联起来,例如菜单和工具栏按钮等。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
vc实现窗口全屏的一些方法
窗口客户区全屏显示
多文档如何实现彻底全屏?
VC窗体设计集锦
IntersectionObserver 了解
用VC制作动态弹出的对话框
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服