为MFC应用程序添加全屏幕显示功能

news/2024/7/7 16:27:34

 为MFC应用程序添加全屏幕显示功能
在CMainFrame类中添加下列成员变量和成员函数(使用ClassWizard),下面是这些变量和函数的功能说明:

成员变量:
BOOL m_bFullScreen; //全屏幕显示标志
CRect m_FullScreenWindowRect; //全屏幕显示窗口Rect
WINDOWPLACEMENT m_wpPrev; //用于保存正常视图时的窗口位置信息
CToolBar * m_wndFullScreenBar; //全屏幕显示时的浮动工具条

成员函数:
void OnMenuFullscreen(); //全屏幕显示的处理函数
void OnGetMinMaxInfo(); //捕获WM_GETMINMAXINFO消息以便允许你增加窗口大小
void OnUpdateViewFullScreen(); //更新“全屏幕显示”菜单的状态

源码

void CMainFrame::OnMenuFullscreen()
{//全屏幕显示的处理函数
RECT rectDesktop;
WINDOWPLACEMENT wpNew;

if (m_bFullScreen)
{//全屏幕显示模式
//隐藏工具条和状态条
m_wndStatusBar.ShowWindow(SW_HIDE);
m_wndToolBar.ShowWindow(SW_HIDE);

//保存正常视图时的窗口位置信息以便恢复原来状态
GetWindowPlacement (&m_wpPrev);
m_wpPrev.length = sizeof m_wpPrev;

//调整RECT为新的窗口尺寸
::GetWindowRect ( ::GetDesktopWindow(), &rectDesktop );
::AdjustWindowRectEx(&rectDesktop, GetStyle(), TRUE, GetExStyle());

//保存RECT以便OnGetMinMaxInfo()使用
m_FullScreenWindowRect = rectDesktop;

wpNew = m_wpPrev;
wpNew.showCmd = SW_SHOWNORMAL;
wpNew.rcNormalPosition = rectDesktop;

//生成新的工具条
m_wndFullScreenBar=new CToolBar;

if(!m_wndFullScreenBar->Create(this, CBRS_SIZE_DYNAMIC|CBRS_FLOATING)
|| !m_wndFullScreenBar->LoadToolBar(IDR_FULLSCREEN))
{
TRACE0("Failed to create toolbar/n");
return; // fail to create
}

//不允许工具条停泊
m_wndFullScreenBar->EnableDocking(FALSE);
m_wndFullScreenBar->SetWindowPos(0,100,100,0,0,SWP_NOSIZE
|SWP_NOZORDER|SWP_NOACTIVATE|SWP_SHOWWINDOW);
m_wndFullScreenBar->SetWindowText(_T("全屏幕显示"));
FloatControlBar(m_wndFullScreenBar, CPoint(100,100));
m_bFullScreen=TRUE;
}
else
{//正常显示模式
//删除全屏幕工具条
m_wndFullScreenBar->DestroyWindow();
delete m_wndFullScreenBar;

m_bFullScreen=FALSE;

//恢复工具条和状态条
m_wndStatusBar.ShowWindow(SW_SHOWNORMAL);
m_wndToolBar.ShowWindow(SW_SHOWNORMAL);
wpNew = m_wpPrev;
}

//设置窗口显示状态
SetWindowPlacement ( &wpNew );
}

void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
if (m_bFullScreen)
{
lpMMI->ptMaxSize.y = m_FullScreenWindowRect.Height();
lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y;
lpMMI->ptMaxSize.x = m_FullScreenWindowRect.Width();
lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x;
}
}

void CMainFrame::OnUpdateMenuFullscreen(CCmdUI* pCmdUI)
{//更新菜单的状态
pCmdUI->Enable();
pCmdUI->SetCheck(m_bFullScreen);
}


 


http://www.niftyadmin.cn/n/1999042.html

相关文章

游戏封包模拟器_再来!月神带你挖游戏的内存漏洞

_投稿:月神配图:M_____先不讲wpe的思路,因为游戏种类繁杂,每个游戏的功能不同,测试方式也不一样。后面再讲,今天要讲的是CE,一款内存修改器。相信很多人都使用过,类似于金山游侠。通…

使用sklearn进行数据挖掘

sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare 目录 1 使用sklearn进行数据挖掘  1.1 数…

用VC++6.0 Sockets API实现聊天室程序

用VC6.0 Sockets API实现聊天室程序 1.VC网络编程及Windows Sockets API简介 VC对网络编程的支持有socket支持,WinInet支持,MAPI和ISAPI支持等。其中,Windows Sockets API是TCP/IP网络环境里,也是Internet上进行开发最为通用的API…

pip19离线_断网环境下利用pip安装Python离线安装包(转载)

这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧。#生产环境 windows 7#python 2.7.9#pip 1.5.2友情提示:当你遇到无法安装包的不明错误时,可以回头来考虑如下建议了&am…

七周二次课(1月23日)

七周二次课(1月23日)10.6 监控io性能iostat -xiostat -x 1%util 磁盘等待io 数字大,磁盘读写等待过长iotop动态显示 根据磁盘iodb数据库示例10.7 free命令free 查看内存 centos6和7显示结果不同buff 缓冲 cache 缓存 数据流向图解…

VC增加自定义消息

VC增加自定义消息 ClassWizard不允许增加用户自定义消息,所以你必须手工输入。输入后,ClassWizard就可以象处理其它消息一样处理你自定义的消息了。 下面是增加自定义消息的步骤: 第一步:定义消息。开发Windows95应用程序时&…

hashmap为什么是2的倍数_HashMap扩容大小为什么是2的幂

1、前言在回答这个问题之前,我们可以回顾一下HashMap的存取过程,当执行putVal的操作的时候,首先检查大小,看是否需要扩容(默认元素超过最大值的0.75时扩容),如果需要扩容就进行扩容然后计算出key的hashcode&#xff0c…

zlggui菜单12864_悠景双色12864OLED驱动+ZLGGUI简单移植,有图有真相

最近也做了个OLED的温度计,方案是ZLG Easy ARM113818B202.4OLED双色屏LT3465本来想等CP2102的USB转串口做完,可以在电脑上记录分析温度以后才传方案,现在既然楼主先贴了,那我也来凑凑热闹吧。(原文件名:Photo_0001.jpg)(原文件名:…