MFC全屏显示和多窗口动态显示的一些技巧和方法
一、全屏
1、全屏窗口从dialogex继承,因为要处理一些东西
2、全屏代码,这样设置后尺寸不会出bug,只设置为最大值的话容易出bug
//get current system resolution
int g_iCurScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int g_iCurScreenHeight = GetSystemMetrics(SM_CYSCREEN);
//for full screen while backplay
GetWindowPlacement(&_struOldWndpl);
CRect rectWholeDlg;//entire client(including title bar)
CRect rectClient;//client area(not including title bar)
CRect rectFullScreen;
GetWindowRect(&rectWholeDlg);
RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &rectClient);
ClientToScreen(&rectClient);
rectFullScreen.left = rectWholeDlg.left - rectClient.left;
rectFullScreen.top = rectWholeDlg.top - rectClient.top;
rectFullScreen.right = rectWholeDlg.right + g_iCurScreenWidth - rectClient.right;
rectFullScreen.bottom = rectWholeDlg.bottom + g_iCurScreenHeight - rectClient.bottom;
//enter into full screen;
WINDOWPLACEMENT struWndpl;
struWndpl.length = sizeof(WINDOWPLACEMENT);
struWndpl.flags = 0;
struWndpl.showCmd = SW_SHOWNORMAL;
struWndpl.rcNormalPosition = rectFullScreen;
SetWindowPlacement(&struWndpl);
return true;
3、全屏机制,创建全局的全屏类,也可以动态创建,竞争可以比较指针代替状态设置
4、ShowWindow(SW_SHOW);ShowWindow(SW_HIDE);进行显示关闭
5、全屏对按键消息的处理,包括win按键的处理
BOOL cloudfullscreen::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYUP)
{
switch (pMsg->wParam)
{
case VK_ESCAPE:
resetOwner();
break;
case VK_LWIN:
resetOwner();
break;
case VK_RWIN:
resetOwner();
break;
defalut:
break;
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}
6、dialog对话框的bug,重写
virtual void OnCancel();
virtual void OnOK();并注释掉原来的处理内容
不然esc和return按键会出bug
7、设置焦距:->SetFocus();
8、设置全屏实例化的对话框也需要创建才会执行initdialog函数
cloud_fullscreen_dialog_global.Create(IDD_CLOUD_FULLSCREEN);
可以用静态标志位判断是否第一次创建。
二、动态显示子窗口及子窗口中的多个控件
1、子窗口最好继承dialogex,这样才能处理消息和重载虚函数
2、控件可以静态画上去,或动态创建
3、思想:同一子窗口中的不同控件分层思想设置显示位置,(一般按相对比率来计算绝对位置,再画上去。若控件数目不定则用其它方法)
4、获取客户区大小
CRect clientRect;
::GetClientRect(this->m_hWnd, &clientRect); //取客户区大小
5、移动控件,改变大小
::MoveWindow(c._wnd, r.left, r.top, r.Width(), r.Height(), TRUE);
6、显示::ShowWindow(i.second->_wnd, SW_SHOW);
7、控件是否被点击判断
POINT CurPt;
CurPt.x = point.x;
CurPt.y = point.y;
CRect PntDspRect;
::GetWindowRect(_wnd, &PntDspRect);
CWnd::FromHandle(_wnd)->GetParent()->ScreenToClient(&PntDspRect);
if ((CurPt.x < PntDspRect.left) || (CurPt.x > PntDspRect.right)
|| (CurPt.y < PntDspRect.top) || (CurPt.y > PntDspRect.bottom))
{
return false;
}
CurPt.x = CurPt.x - PntDspRect.left;
CurPt.y = CurPt.y - PntDspRect.top;
if (CurPt.x < 0 || CurPt.y > PntDspRect.right || CurPt.y<0 || CurPt.y > PntDspRect.bottom)
return false;
return true;
注意:鼠标滚轮旋转(注意只是旋转,滚轮点击鼠标输入坐标和左右键输入坐标一样)输入坐标是屏幕坐标,应直接判断,不需要用父窗口判断
8、dialog对话框的bug,重写
virtual void OnCancel();
virtual void OnOK();并注释掉原来的处理内容
不然esc和return按键会出bug
9、设置焦距:->SetFocus();
MFC全屏显示和多窗口动态显示的一些技巧和方法的更多相关文章
- 在VC++6.0开发中实现全屏显示
全屏显示是一些应用软件程序必不可少的功能.比如在用VC++编辑工程源文件或编辑对话框等资源时,选择菜单“View\Full Screen”,即可进入全屏显示状态,按“Esc”键后会退出全屏显示状态. ...
- 【温故而知新-Javascript】窗口效果 (全屏显示窗口、定时关闭窗口)
1.全屏显示窗口 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- QT中关于窗口全屏显示与退出全屏的实现
近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一些关于这方面的答案,希望能给大家一些帮助. 首先,在QT中对于窗口显示常用的有这么几个方法可以调用: Qt全屏显示 ...
- Qt全屏显示窗口、子窗口的相关函数
Qt全屏显示函数 window.showFullScreen() Qt最大化显示函数 window.showMaximized() Qt最小化显示函数 ...
- QT5中全屏显示子窗口和取消全屏的方法
问题描述:用QT5做了个MDI多窗体应用程序,想把子窗体全屏显示,用网上的方法,但总是遇到问题. 网上的解决方法原文在这:http://www.cnblogs.com/Rick-w/archive/2 ...
- C# WinForm中 让控件全屏显示的实现代码
夏荣全 ( lyout(at)163.com )原文 C#中让控件全屏显示的实现代码(WinForm) 有时候需要让窗口中某一块的内容全屏显示,比如视频播放.地图等等.经过摸索,暂时发现两种可行方法, ...
- android启动画面隐藏状态栏全屏显示
1.在根部局给一个id,然后直接设置就行了layout.setSystemUiVisibility(View.INVISIBLE); 状态栏就没有了. 2.如果你只是想改变状态栏颜色的也可以 //5. ...
- PyQt5图像全屏显示
Windows装这个:https://pypi.python.org/pypi/PyQt5Ubuntu输入这个:sudo apt-get install python3-pyqt5 或者直接输入:pi ...
- JavaScript:让浏览器全屏显示
并不是所有人都会按F11让浏览器全屏显示~~~ 一.直接上代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xh ...
随机推荐
- Django部署方法
Windows方案: Apache2.4 + Django2.0 网上的方法乱七八糟: 那么接下来:最好的方法,不行吃屎. 当前环境是Django2.0+ python35(64bit) 部署原因: ...
- C++设计模式——状态模式
前言 在实际开发中,我们经常会遇到这种情况:一个对象有多种状态,在每一个状态下,都会有不同的行为.那么在代码中我们经常是这样实现的. typedef enum tagState { state, st ...
- css :root 选择器
:root css 伪类匹配文档的根元素. 对于 HTML 来说, :root 表示<html>元素,除了优先级更高之外,与 html 选择器相同. 在声明全局 css 变量时 :root ...
- java中的BigDecimal和String的相互转换,int和String的类型转换,Integer类和String相互转换
一: /*由数字字符串构造BigDecimal的方法 *设置BigDecimal的小数位数的方法 */ 注:BigDecimal在数据库中存的是number类型. import java.math.B ...
- python3 基础语法(二)
一.python3的基本数据类型: 和其他语言一样都包含了以下数据类型: 类型 含义 实例 INT 整型(integer) 1 FLOAT 浮点型 1.1 BOOL 布尔值 TRUE/FALSE ST ...
- 利用BootStrap Table插件实现自己的弹出框分页。
参考链接1: 官网:http://bootstrap-table.wenzhixin.net.cn/zh-cn/home/ 开始使用:http://bootstrap-table. ...
- 11 个超棒的 jQuery 分步指引插件
当一个网站或者一个Web应用推出新功能时,为了让用户了解你的站点(或应用)如何操作,往往都会在站点(应用)中添加一个分步指引的效果.然而这样的效果,对于不懂原生JS的同学来说,是件很头痛的事情. 下面 ...
- UWP WebView 禁用缩放
只要加入一行 css 样式就行了 html, body { -ms-content-zooming:none; } MSDN:https://msdn.microsoft.com/library/ ...
- 使用 NPOI 导出 Excel 文件
[NPOI简介] NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者 ...
- python下载大文件
1. wget def download_big_file_with_wget(url, target_file_name): """ 使用wget下载大文件 Note: ...