MFC中主副屏窗口全屏最大化的几种方法
MFC中主副屏窗口全屏最大化的几种方法
1、根据鼠标位置判断全屏位置
枚举所有窗口
CArray<MONITORINFO, MONITORINFO&> g_arrMonitorInfo;BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{static BOOL bFirst = TRUE;MONITORINFO monitorinfo;monitorinfo.cbSize = sizeof(MONITORINFO);//获得显示器信息,将信息保存到monitorinfo中GetMonitorInfo(hMonitor, &monitorinfo);//若检测到主屏if (monitorinfo.dwFlags == MONITORINFOF_PRIMARY){if (bFirst) //第一次检测到主屏{bFirst = FALSE;}else //第二次检测到主屏,所有的监视器都已经检测了一遍,停止检测{bFirst = TRUE;return FALSE;}}g_arrMonitorInfo.Add(monitorinfo);return TRUE;
}
重写窗口最大化函数
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{if (nType == SIZE_MAXIMIZED && !CUserOptionSettingsCache::Instance()->GetLoginBasicFullScreen()){g_arrMonitorInfo.RemoveAll();EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, NULL);//获取当前鼠标位置,判断将窗口全屏到那个屏幕CPoint ptScreen;GetCursorPos(&ptScreen);for (int i = 0; i < g_arrMonitorInfo.GetSize(); i++){CRect rcScreen = g_arrMonitorInfo[i].rcMonitor;if (rcScreen.PtInRect(ptScreen)){CRect rcWorkArea = g_arrMonitorInfo[i].rcWork;CRect rc;rc.SubtractRect(rcScreen, rcWorkArea);rcWorkArea.InflateRect((rc.Height() > rc.Width() && rc.left == rcScreen.left) ? 0 : 1,(rc.Width() > rc.Height() && rc.top == rcScreen.top) ? 0 : 1,(rc.Height() > rc.Width() && rc.right == rcScreen.right) ? 0 : 1,(rc.Width() > rc.Height() && rc.bottom == rcScreen.bottom) ? 0 : 1);MoveWindow(&rcWorkArea);break;}}CBCGPFrameWnd::OnSize(nType, cx, cy);
}
2、利用窗口在屏幕位置进行识别
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{if (nType == SIZE_MAXIMIZED && !CUserOptionSettingsCache::Instance()->GetLoginBasicFullScreen()){//通过程序在那个屏幕中占比多判断全屏那个屏幕MONITORINFO mi;mi.cbSize = sizeof(MONITORINFO);if (GetMonitorInfo(MonitorFromWindow(this->GetSafeHwnd(), MONITOR_DEFAULTTONEAREST), &mi)){CRect rcScreen = mi.rcMonitor;CRect rcWorkArea = mi.rcWork;CRect rc;rc.SubtractRect(rcScreen, rcWorkArea);rcWorkArea.InflateRect((rc.Height()>rc.Width() && rc.left == rcScreen.left) ? 0 : 1,(rc.Width()>rc.Height() && rc.top == rcScreen.top) ? 0 : 1,(rc.Height()>rc.Width() && rc.right == rcScreen.right) ? 0 : 1,(rc.Width()>rc.Height() && rc.bottom == rcScreen.bottom) ? 0 : 1);MoveWindow(&rcWorkArea);}}CBCGPFrameWnd::OnSize(nType, cx, cy);
}
MFC中主副屏窗口全屏最大化的几种方法相关推荐
- MFC中CSTATIC控件双击全屏/双击恢复
双击全屏方法有两种 1.双击放大的时候调static控件的父句柄SerParent让控件的父句柄变成桌面,然后再提取桌面的分辨率用movewindow或者setwindowpos改变控件大小.恢复成原 ...
- QT中关于窗口全屏显示与退出全屏的实现
近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一些关于这方面的答案,希望能给大家一些帮助. 首先,在QT中对于窗口显示常用的有这么几个方法可以调用: Qt全屏显示 ...
- Mac osx系统中virtual box 中的Ubuntu系统的全屏显示问题解决
Mac osx系统中virtual box 中的Ubuntu系统的全屏显示问题解决 一 安装virtualBox工具 安装失败 其他尝试方法 一 安装virtualBox工具 选择Insert Gue ...
- Android Window悬浮窗窗口全屏(隐藏导航栏状态栏)
在应用开发中,有时候需要利用弹出全屏的悬浮窗,因为有导航栏显示所以总是不能全屏,所以需要设置某些属性 让窗口全屏显示 例如: 在onCreate中的这段代码 Window window = getWi ...
- vmware16中win7虚拟机怎么设置全屏显示
文章目录 一.win7系统屏幕没有适应vmware窗口全屏问题 二.解决办法 1.懒人方法 2.安装 vmware tools工具 操作系统要更新到sp1 没有安装win7补丁 一.win7系统屏幕没 ...
- 解决uni-app开发中iphoneX下背景不能全屏铺满的问题
解决uni-app开发中iphoneX下背景不能全屏铺满的问题 参考文章: (1)解决uni-app开发中iphoneX下背景不能全屏铺满的问题 (2)https://www.cnblogs.com/ ...
- 【VMware】win 10:解决 win 7 虚拟机系统屏幕没有适应 vmware 窗口全屏问题
目录 一.虚拟机系统屏幕没有适应vmware窗口全屏问题 二.解决方法 一.虚拟机系统屏幕没有适应vmware窗口全屏问题 二.解决方法 (1)虚拟机系统处于启动状态,点击打开"安装vmwa ...
- Vue中使用纯CSS实现全屏网格加渐变色背景布局
Vue中使用纯CSS实现全屏网格加渐变色背景布局 CSDN:jcLee95 邮箱:291148484@163.com 本文地址:https://blog.csdn.net/qq_28550263/ar ...
- Android fragment 中控制某一个界面全屏与否
项目中,只允许一个界面在横屏的时候,显示是全屏的,竖屏切换回来的时候又需要显示状态栏,所以需要监听横竖屏的状态,还要修改状态栏的隐藏与显示,如下代码: /*** 添加横竖屏监听,隐藏图形的菜单控件,2 ...
最新文章
- Linux的centos7.2部署rocketMq3.5.8
- Apache Mahout基于商品的协同过滤算法流程分析
- 强连通分量(学习心得)
- 如何在Windows上解决蓝牙问题
- Django 模板系统2
- java中四类八中_JAVA中的八中基本数据类型
- DISCUZ X3.0 积分增减以及记录
- SpringCloud学习笔记024---SpringBoot中使用大部分公用的配置记录
- JavaScript从父页面获取子页面的值(子页面又如何访问父页面)
- 在Git项目中使用pre-commit统一管理hooks
- HTTP请求过程——Chrome浏览器Network详解
- android 模拟点击menu键,android编程之menu按键功能实现方法
- 批处理文件——BAT学习
- matlab 收敛,MATLAB:svds()没有收敛
- 漫谈程序员系列:别说“我已经很努力了”
- 关于tp-link 路由器
- dellr420部署os_Dell R420服务器手动安装centos7系统系列问题
- ★深度优先搜索+解空间树+递归,三合一详解
- 总体设计--《软件工程导论》
- 关于Halcon的离心机试管槽定位