在MFC程序中添加全屏显示功能

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

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

以下的代码被添加到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);

}

(全文完)

目录
相关文章
|
JavaScript 前端开发
JavaScript实现11位手机号码正则表达式
JavaScript实现11位手机号码正则表达式
430 0
|
10月前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
11月前
|
关系型数据库 MySQL Linux
Linux-安装Mariadb
本文介绍了在 Alibaba Cloud Linux 系统上安装和配置 MariaDB 10.5 的步骤。包括下载安装、初始化数据库、启动服务、处理启动失败的常见问题(如权限问题),以及如何连接数据库、设置密码和允许外部连接。通过这些步骤,您可以顺利完成 MariaDB 的安装和基本配置。
1031 0
|
存储 缓存 NoSQL
浅谈分布式数据库系统
【6月更文挑战第4天】该文探讨了数据库管理系统的解决方案,建议使用Redis和MQ作为缓存和中转,减轻数据库压力。分布式系统需透明处理数据位置,解决查询执行和正确性问题。了解这些底层设计有助于应对性能挑战。
464 8
浅谈分布式数据库系统
|
Linux C语言 iOS开发
MacOS环境-手写操作系统-06-在mac下通过交叉编译:C语言结合汇编
MacOS环境-手写操作系统-06-在mac下通过交叉编译:C语言结合汇编
251 0
|
算法 Linux Windows
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
在Windows环境下为FFmpeg集成字幕渲染库libass涉及多个步骤,包括安装freetype、libxml2、gperf、fontconfig、fribidi、harfbuzz和libass。每个库的安装都需要下载源码、配置、编译和安装,并更新PKG_CONFIG_PATH环境变量。最后,重新配置并编译FFmpeg以启用libass及相关依赖。完成上述步骤后,通过`ffmpeg -version`确认libass已成功集成。
448 1
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
|
程序员 索引 Python
探索Python异常:让程序不再崩溃!
探索Python异常:让程序不再崩溃!
MFC学习之路十三之定时器的使用
MFC学习之路十三之定时器的使用
291 0
|
C语言
c语言通过easyx窗口实现小球打砖块的游戏
c语言通过easyx窗口实现小球打砖块的游戏
314 0
|
C++ Windows
windows启动单个进程实例(系统中只有一个运行实例)
windows启动单个进程实例(系统中只有一个运行实例)
335 0
windows启动单个进程实例(系统中只有一个运行实例)