下面介绍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);
}