您的位置:首页 > 其它

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: