博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在MFC程序中添加全屏显示功能
阅读量:7026 次
发布时间:2019-06-28

本文共 2407 字,大约阅读时间需要 8 分钟。

这是工作室为实现全屏显示所发集的一个演示程序。你可以通过选择全屏显示菜单选项时看到相应的效果。这段代码包括两个内容:全屏显示,浮动工具条(用于恢复操作)。

以下的代码被添加到CmainFrame类中。这里是使用到的四个消息以及他们的简要说明:

1. OnViewFullScreen:全屏显示菜单项的句柄。
2. OnGetMinMaxInfo:捕获 WM_GETMINMAXINFO消息来让你改变窗体大小。
3. IsFullScreen:测试程序是否是以全屏模式显示。
4. OnUpdateViewFullScreen:根据程序模式显示选中或不选中全屏显示菜单项。

主要代码举例:

void CMainFrame::OnViewFullScreen() {	RECT rectDesktop;    WINDOWPLACEMENT wpNew;    if (!IsFullScreen())    {        // 需要所有状态栏        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());	    // 把参数用于 OnGetMinMaxInfo()	    m_FullScreenWindowRect = rectDesktop;                wpNew = m_wpPrev;        wpNew.showCmd =  SW_SHOWNORMAL;	    wpNew.rcNormalPosition = rectDesktop;	            // 创建新的工具栏         m_pwndFullScrnBar=new CToolBar;         if (!m_pwndFullScrnBar->Create(this,CBRS_SIZE_DYNAMIC|CBRS_FLOATING) ||		    !m_pwndFullScrnBar->LoadToolBar(IDR_FULLSCREEN))    	    {	    	    TRACE0("Failed to create toolbar\n");			    return;      //创建失败	        }                 //不允许工具栏停靠         m_pwndFullScrnBar->EnableDocking(0);		 m_pwndFullScrnBar->SetWindowPos(0, 100,100, 0,0,SWP_NOSIZE|SWP_NOZORDER| SWP_NOACTIVATE|SWP_SHOWWINDOW);   		 m_pwndFullScrnBar->SetWindowText(_T("Full Screen"));	     FloatControlBar(m_pwndFullScrnBar, CPoint(100,100));		 m_bFullScreen=TRUE;    }    else    {         m_pwndFullScrnBar->DestroyWindow();		 delete m_pwndFullScrnBar;         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 (IsFullScreen())    {        lpMMI->ptMaxSize.y = m_FullScreenWindowRect.Height();	    lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y;	    lpMMI->ptMaxSize.x = m_FullScreenWindowRect.Width();	    lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x;    }   }

//测试窗体状态

BOOL CMainFrame::IsFullScreen(){     return m_bFullScreen;}

//是否选中菜单

void CMainFrame::OnUpdateViewFullScreen(CCmdUI* pCmdUI) {	pCmdUI->Enable();	if (IsFullScreen())		pCmdUI->SetCheck();	else        pCmdUI->SetCheck(0);}

(全文完)

转载地址:http://skmxl.baihongyu.com/

你可能感兴趣的文章
Android签名问题
查看>>
Apache+Tomcat整合
查看>>
codewars069 饥饿游戏:动物园的灾难!
查看>>
derby操作-sqleonardo
查看>>
hive配置参数说明
查看>>
HTML-embed标签详解 -audio
查看>>
navicat添加blob步骤
查看>>
高仿小米launcher(ZAKER)跨屏拖动item(有源码)
查看>>
Huge mistakes!
查看>>
IOS_UIPickerView
查看>>
人类还在进化吗?
查看>>
关于使用++a和for循环实现a-b.
查看>>
SpringMVC老版本解析Jackson
查看>>
SqlBuilder
查看>>
redhat6.4配置centos6 yum替换
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
Multiple Tabs
查看>>
JCNotificationBannerPresenter
查看>>
js闭包
查看>>
FreeCMS视频教程 还原数据库 mysql
查看>>