MFC窗体实现 F11全屏切换 2种方法
2011-08-07 01:44
537 查看
下面介绍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);
}
相关函数 介绍
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);
}
相关文章推荐
- MFC窗体实现 F11全屏切换 2种方法
- 小记MFC下全屏实现方法之一
- Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
- 新旧MFC版本实现CEdit透明的2种方法的实例代码
- Java Swing实现窗体添加背景图片的2种方法详解
- 在MFC的程序中利用DXGI的ALT+ENTER无法实现切换到全屏模式的原因
- Android编程实现播放视频时切换全屏并隐藏状态栏的方法
- Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
- 用户管理:登录窗体通过ShowDialog()方法实现切换
- jquery实现网站列表切换效果的2种方法
- MFC 全屏与窗口切换,类似浏览器的F11功能
- VC MFC 全屏的快捷实现方法
- ATL中实现全屏切换的方法
- MFC中对话框全屏(非最大化)实现方法
- Android编程之界面实现全屏显示的方法(2种方法)
- MFC SDI单文档多视图的实现及自由切换(2种实现方式简析)
- Delphi7 实现窗体全屏方法
- iOS AVPlayer切换播放源实现连续播放和全屏切换的方法
- 新旧MFC版本CEdit透明的2种实现方法
- MFC单文档(SDI)全屏程序实现方法