VC中全屏窗口的实现
来源:百度文库 编辑:神马文学网 时间:2024/03/28 23:54:46
实现全屏主要就是两个工作:
<1>让框架窗口的客户区占满整个屏幕,
<2> 退出全屏后恢复窗口之前的大小和位置,以实现全屏模式和非全屏模式的切换
我是这样进行实现的:
<1>在主窗口内加入三个成员变量:
BOOL m_bFullScreen ; //代表当前窗口的状态是否为全屏的标志
CRect * m_pFullScreenRect ; //保存在全屏状态下时的窗口的窗口矩形
WINDOWPLACEMENT m_OldWndPlacement ; //保存进入全屏前的窗口放置信息(大小,位置等)
<2>定义进人全屏操作的函数和退出全屏操作的函数 (当然,也可以就定义一个函数)
void CMainFrame::OnFullscreen()
{
if(m_bFullScreen)
{
EndFullScreen();
return;
}
//获取并保存当前窗口的位置,以便退出全屏时进行恢复
GetWindowPlacement(&m_OldWndPlacement);
// 获取屏幕的大小
int nFullHeight = GetSystemMetrics(SM_CYSCREEN);
int nFullWidth = GetSystemMetrics(SM_CXSCREEN);
//创建一个新的客户区区域,使它正好覆盖全屏
CRect clientRect;
clientRect.left = 0;
clientRect.right = nFullWidth;
clientRect.top = 0;
clientRect.bottom = nFullHeight;
//根据要使用的客户区区域信息计算出此客户区需要的窗口的区域信息并保存在参数内
CalcWindowRect(&clientRect);
//把窗口全屏时它的区域信息保存到成员变量中去
m_pFullScreenRect->CopyRect(&clientRect);
/*
//调用MoveWindow操作将窗口移动到全屏对应的正确区域. 注意: 因为MoveWindow要发出 WM_GETMINMAXINFO
//消息,通过对此消息的处理可以确认和更正窗口区域是否在最大和最小之间。因为我们要让窗口全屏,因此就要
//在全屏时使用我们设定的窗口区域作为最大区域的判定数据,而在非全屏时,就应该使用系统默认的数据来进行
//判定,因此应该在调用MoveWindow之前先设定全屏标志为真,以保证在处理WM_GETMINMAXINFO时使用正确的区域来进行最大化判定
*/
MoveWindow(m_pFullScreenRect);
//设定全屏标志为真
m_bFullScreen = true;
}
// 停止全屏显示的函数
void CMainFrame::EndFullScreen(void)
{
if(m_bFullScreen)
{
// hide the window
ShowWindow(SW_HIDE);
// recove the window placement
SetWindowPlacement(&m_OldWndPlacement);
// 设定全屏状态标志为假
m_bFullScreen = false;
}
}
<3>重写WM_GETMINMAXINFO消息的处理函数
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
if(m_bFullScreen)
{
lpMMI->ptMaxSize.x = m_pFullScreenRect->Width();
lpMMI->ptMaxSize.y = m_pFullScreenRect->Height();
lpMMI->ptMaxPosition.x = m_pFullScreenRect->Width();
lpMMI->ptMaxPosition.y = m_pFullScreenRect->Height();
lpMMI->ptMaxTrackSize.x = m_pFullScreenRect->Width();
lpMMI->ptMaxTrackSize.y = m_pFullScreenRect->Height();
}
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
<4> 将GUI事件的处理和全屏函数关联起来,例如菜单和工具栏按钮等。
<1>让框架窗口的客户区占满整个屏幕,
<2> 退出全屏后恢复窗口之前的大小和位置,以实现全屏模式和非全屏模式的切换
我是这样进行实现的:
<1>在主窗口内加入三个成员变量:
BOOL m_bFullScreen ; //代表当前窗口的状态是否为全屏的标志
CRect * m_pFullScreenRect ; //保存在全屏状态下时的窗口的窗口矩形
WINDOWPLACEMENT m_OldWndPlacement ; //保存进入全屏前的窗口放置信息(大小,位置等)
<2>定义进人全屏操作的函数和退出全屏操作的函数 (当然,也可以就定义一个函数)
void CMainFrame::OnFullscreen()
{
if(m_bFullScreen)
{
EndFullScreen();
return;
}
//获取并保存当前窗口的位置,以便退出全屏时进行恢复
GetWindowPlacement(&m_OldWndPlacement);
// 获取屏幕的大小
int nFullHeight = GetSystemMetrics(SM_CYSCREEN);
int nFullWidth = GetSystemMetrics(SM_CXSCREEN);
//创建一个新的客户区区域,使它正好覆盖全屏
CRect clientRect;
clientRect.left = 0;
clientRect.right = nFullWidth;
clientRect.top = 0;
clientRect.bottom = nFullHeight;
//根据要使用的客户区区域信息计算出此客户区需要的窗口的区域信息并保存在参数内
CalcWindowRect(&clientRect);
//把窗口全屏时它的区域信息保存到成员变量中去
m_pFullScreenRect->CopyRect(&clientRect);
/*
//调用MoveWindow操作将窗口移动到全屏对应的正确区域. 注意: 因为MoveWindow要发出 WM_GETMINMAXINFO
//消息,通过对此消息的处理可以确认和更正窗口区域是否在最大和最小之间。因为我们要让窗口全屏,因此就要
//在全屏时使用我们设定的窗口区域作为最大区域的判定数据,而在非全屏时,就应该使用系统默认的数据来进行
//判定,因此应该在调用MoveWindow之前先设定全屏标志为真,以保证在处理WM_GETMINMAXINFO时使用正确的区域来进行最大化判定
*/
MoveWindow(m_pFullScreenRect);
//设定全屏标志为真
m_bFullScreen = true;
}
// 停止全屏显示的函数
void CMainFrame::EndFullScreen(void)
{
if(m_bFullScreen)
{
// hide the window
ShowWindow(SW_HIDE);
// recove the window placement
SetWindowPlacement(&m_OldWndPlacement);
// 设定全屏状态标志为假
m_bFullScreen = false;
}
}
<3>重写WM_GETMINMAXINFO消息的处理函数
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
if(m_bFullScreen)
{
lpMMI->ptMaxSize.x = m_pFullScreenRect->Width();
lpMMI->ptMaxSize.y = m_pFullScreenRect->Height();
lpMMI->ptMaxPosition.x = m_pFullScreenRect->Width();
lpMMI->ptMaxPosition.y = m_pFullScreenRect->Height();
lpMMI->ptMaxTrackSize.x = m_pFullScreenRect->Width();
lpMMI->ptMaxTrackSize.y = m_pFullScreenRect->Height();
}
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
<4> 将GUI事件的处理和全屏函数关联起来,例如菜单和工具栏按钮等。
VC中全屏窗口的实现
VC++中MFC窗口对象的清除
linux宝库/vc/在VC 6.0开发中实现全屏显示
[网易学院]?VC++?6.0中实现三叉切分窗口与多视图现
VC中实现历史记录的全面清除
转在VC中如果实现GIF的播放?
VC中三态选择树实现的终结者
VC中利用多线程技术实现线程之间的通信
VC中利用多线程技术实现线程之间的通信
如何在vc中实现语音信息的采集
VC++编程实现广告窗口自动关闭 - 网易学院·教程
VC实现在状态栏中加入进度指示器 - cucme的日志 - 网易博客
VC中坐标系的建立 - VC - 转载
VC++内部COM插件的编程实现
MFC实现全屏功能的代码-it群
如何实现透明窗口
JavaScript实现窗体屏蔽并打开一个新的窗口
股市中时间窗口的含义
对话框属性中设置的窗口风格
VC中坐标系的建立 zz - VC - 转载
VC中坐标系的建立 zz - VC - 转载
VC++实现插件编程
VC知识库文章 - MFC程序员的WTL指南: Part VII - 分隔窗口
VC实现串行通信的动态链接库(DLL)