MFC窗体实现 F11全屏切换 2种方法

简介:    下面介绍2种方法 实现 F11 全屏切换窗体  ......    相关函数  介绍  RepositionBars(0, AFX_IDW_PANE_FIRST, AFX_IDW_PANE_LAST, reposQuery , &enableClient);   //这个...
 


 下面介绍2种方法 实现 F11 全屏切换窗体  ......  

 相关函数  介绍
 RepositionBars(0, AFX_IDW_PANE_FIRST, AFX_IDW_PANE_LAST, reposQuery , &enableClient);   //这个函数重新摆放控件 ,并且根据参数 reposQuery  获得窗体客户区矩形
 MoveWindow  移动窗体
 SetWindowPlacement 设置窗体位置 
 GetWindowPlacement 获得窗体位置信息函数   具体MSDN
 WINDOWPLACEMENT  结构体保存窗体位置信息
 ClientToScreen  客户坐标到屏幕坐标的映射
 GetSystemMetrics(SM_CXSCREEN);
 GetSystemMetrics(SM_CYSCREEN);  获得屏幕宽和高  
 OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)   消息响应函数 设置最窗体追踪高度 


 下面是主要代码  工程我打包传道MSDN  0积分下载   

 
 1.
   在MDI中的 VIEW类 增加   键盘按下响应    
   增加成员变量 BOOL bFullScreen;
   在构造函数中初始化为 FALSE 

 void CF11View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
  
    if(nChar==VK_F11)
 {
       if(this->bFullScreen==FALSE)
    {
                  ((CMainFrame*)AfxGetApp()->m_pMainWnd)->SetFullScreen();   //调用全屏函数
    this->bFullScreen=TRUE;
    }
       else
    {
     ((CMainFrame*)AfxGetApp()->m_pMainWnd)->EndFullScreen();  //退出全屏
     this->bFullScreen=FALSE;
    }
 }

}

2.在 CMainFrame类增加成员 如下
             WINDOWPLACEMENT oldInfo; 


  增加 3个函数 如下


    //设置全屏显示
    void CMainFrame::SetFullScreen()
    {
     int cx  = GetSystemMetrics(SM_CXSCREEN);
 int cy = GetSystemMetrics(SM_CYSCREEN);
    GetWindowPlacement(&oldInfo);  //获得原先窗体的位置信息   
 CRect winRect  ,enableClient;
 GetWindowRect(&winRect); //获得相对于屏幕的窗体的矩形区域
    RepositionBars(0, AFX_IDW_PANE_FIRST, AFX_IDW_PANE_LAST, reposQuery , &enableClient);  //reposQuery这个参数对应后面的CRect对象获取客户区域
 //1:CRect newPos;   //新位置                                                                                        //为了获取可用区域也就是客户区域大小
    RECT newPos;   //新位置
 ClientToScreen(&enableClient); //转换屏幕坐标
 newPos.left=winRect.left-enableClient.left  ;//窗体包括边界 - 内部客户区域  刚好吧边界去掉
 newPos.right=winRect.right-enableClient.right+cx;
 newPos.top=winRect.top-enableClient.top; //顶部也是用客户区域  -窗体  负坐标刚好是便捷的长度
 newPos.bottom=winRect.bottom-enableClient.bottom+cy; //下边框的高度 +  屏幕坐标
 //方法1: MoveWindow(newPos.left,newPos.top,newPos.Width(),newPos.Height());  //最大化
      WINDOWPLACEMENT  wp;
  wp.length=sizeof(WINDOWPLACEMENT);
  wp.flags=0;   //参数 0
  wp.rcNormalPosition=newPos; //新位置
  wp.showCmd=SW_SHOWNORMAL;//正常显示
  ::SetWindowPlacement(this->m_hWnd,&wp); //设置窗体位置 方法2
     }

 

   //退出全屏显示
   void CMainFrame::EndFullScreen()
   {
 SetWindowPlacement(&oldInfo); //恢复原来位置
   }
   


    //这是个消息响应函数 用来设置窗体追踪的最大高度
   void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
  {
       lpMMI->ptMaxTrackSize.y =10000;    //设置最大的窗体追踪高度
 CMDIFrameWnd::OnGetMinMaxInfo(lpMMI);
   }

 

目录
相关文章
|
SQL 缓存 关系型数据库
OBCP题目及解析
OBCP题目及解析
1430 0
|
27天前
|
机器学习/深度学习 人工智能 自然语言处理
UI-Ins:让 GUI 智能体真正“看懂”用户指令的新范式
通义实验室联合人大发布全新GUI Grounding模型UI-Ins,首创“指令即推理”范式,通过多视角动态推理实现SOTA性能,在五大基准全面领先,支持开源复现与应用。
429 1
|
存储 缓存 Java
《Gradle构建脚本的基本结构和语法》
《Gradle构建脚本的基本结构和语法》
281 0
|
前端开发 开发者 容器
CSS 自适应内容宽度的输入框
CSS 自适应内容宽度的输入框
CSS 自适应内容宽度的输入框
|
JavaScript API C++
Vue项目中的文件/文件夹命名规范
文件或文件夹的命名遵循以下原则: index.js 或者 index.vue,统一使用小写字母开头的(kebab-case)命名规范 属于组件或类的,统一使用大写字母开头的(PascalCase)命名规范 其他非组件或类的,统一使用小写字母开头的(kebab-case)命名规范 1.
18056 0
|
安全 数据管理 定位技术
CDGA|自然资源数据治理五部曲,实现数据融合关联、共享可用
在自然资源行业,数据治理是自然资源信息化的工作基础,是推进自然资源治理体系和治理能力现代化进程的必经之路。
|
缓存 网络协议 分布式数据库
超级好用的C++实用库之DNS解析
超级好用的C++实用库之DNS解析
300 0
|
JavaScript 索引 前端开发
9.【TypeScript 教程】接口(Interface)
9.【TypeScript 教程】接口(Interface)
211 4
|
Java 关系型数据库 MySQL
实时计算 Flink版产品使用合集之通过scan.incremental.snapshot.chunk.key-column参数配置来处理无主键表的全量同步,增量数据进不来的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
域名解析 网络协议
Namesilo域名解析
简单的3步,就可以让你快速完成Namesilo域名解析设置,修改DNS解析记录。首先你需要登录Namesilo官网,点击My Account进入账户主页,然后点击Domain Manager打开Namesilo域名管理控制台。找到你想要解析的域名,在其右侧点击蓝色小球图标进入域名修改界面,添加和删除你的域名解析记录。
2566 0
Namesilo域名解析