MFC框架程序中全屏显示特性的实现

在开发图像显示程序以及视频应用程序时,常常需要全屏显示特性,比如ACD See和豪杰解霸等应用都有全屏显示功能。本文将介绍如何在MFC框架程序中实现视图的全屏显示,也就是说将标题、菜单、工具栏、状态栏以及窗口的所有边框全部被隐藏,视图充满整个屏幕。并提供全屏显示与框架窗口之间的快捷切换操作。

大家知道,在MFC框架中并没有提供现成的类或者函数来实现全屏显示特性,至少我到目前为止是没有发现。但是要实现这个特性也并不难。其基本思路是调整主窗口的大小和位置,使视图的显示充满屏幕。它需要以屏幕左上角为原点,处理x,y方向上的负坐标。本文拟用“使用GDI+进行图像处理”一文中的例子代码作为基础,实现视图的全屏显示。我在原来代码中增加了一个可重用的C++类CFullScreenHandler,顾名思义,这个类的作用就是专门用来实现全屏显示特性的,它封装了所有的实现细节,只要你把它加到自己的工程代码中,不用怎么修改就能是程序具备全屏显示功能。这个类中有两个重要的方法调用:第一、Maximize进入全屏显示模式,注意了,这里的全屏显示模式并不是平常我们说的窗口最大化按钮哦。第二、Restore方法用来恢复原来的窗口框架。CFullScreenHandler还提供了一个InFullScreenMode方法,用它来检查程序是否处于全屏显示状态,这些方法都通过一个CFullScreenHandler全程对象实例来调用。下面是程序的主窗口处理命令,全屏显示特性由“查看”菜单中的“全屏显示(&U)”触发执行,关键代码如下:

void CMainFrame::OnViewFullScreen()
{
  if (FullScreenHandler.InFullScreenMode())
    FullScreenHandler.Restore(this);
  else
    FullScreenHandler.Maximize(this);
}

一旦进入全屏显示方式,那么标题栏、菜单栏和工具栏都会消失。千万别忘了告诉用户如何恢复原样,在OnDraw函数中加上几句即可:

void CPictureView::OnDraw(CDC* pDC)
{
   ......
  if (*ppic) {
    ......

    pDC->DrawText(FullScreenHandler.InFullScreenMode() ?
      _T("恢复窗口按 Ctrl-U 或者在客户区双击鼠标") : _T(""), &rc, 0);
  }
}

如图一所示:

图一 给用户的恢复提示

之所以一定要给用户这种提示,是因为Windows程序的一个重要的GUI特点就是界面操作的自解释。否则,当用户进入全屏显示模式后(有意或无意),如果找不到恢复的方法便会令用户感到不知所措。 

下面我们就来看看CFullScreenHandler::Maximize和Restore的工作原理:其实这些代码没有什么高深的东西,只是一些象素计算而已。Maximize首先在m_rcRestore数据成员中保存当前框架的位置,然后计算期望的屏幕尺寸。如图二所示:

图二 计算期望的屏幕尺寸

时间: 2024-10-03 21:36:10

MFC框架程序中全屏显示特性的实现的相关文章

imageview-如何让图片在ImageView中全屏显示?

问题描述 如何让图片在ImageView中全屏显示? 在ScrollView中嵌套Linearlayout,在linearlayout布局中有很多的ImageView控件,然后在代码中添加帧动画,imageview指定大小时(比如layout_width="50dp"),图片可以正常显示,但是做屏幕适配的时,将imageview的layout_width和layout_height设置为match_parent后,所有的图片都是缩小显示,这是为什么?如何做才可以将图片全屏显示? 解决方

分享Android平板电脑上开发应用程序不能全屏显示的问题解决_Android

本来LCD应该是800*600的,但总是得到600*600的结果.经过好几天的努力,才解决: 复制代码 代码如下: <http://schemas.android.com/apk/res/android>"      package="myb.x2.app2"      android:versionCode="1"      android:versionName="1.0">                    

repositionbars的作用-MFC全屏显示代码的解释?

问题描述 MFC全屏显示代码的解释? void CMainFrame::OnFullScreen() { CRect WindowRect; GetWindowRect(&WindowRect); CRect ClientRect; RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&ClientRect); ClientToScreen(&ClientRect); //获取屏幕的分辨率 int nFullWidth=Get

如何从MFC应用程序中调用.NET框架

如何发送击键到其它应用程序? 关于如何通过编程来发送 Ctrl+Alt+Del 击键? 如何从 MFC 应用程序中调用 .NET 框架? 我想编写一个应用程序,它能通过击键将信息写到另外一个应用程序的窗体中.我是不是应该发送 WM_KEYDOWN 和 WM_KEYUP 消息?有没有更好的办法? 发送 WM_KEYDOWN 和 WM_KEYUP 消息也许能行得通,但 SendInput 是专门被设计用于此目的的 API 函数.它通过 INPUT 结构数组参数来合成包括击键和鼠标事件在内的输入,每个

在你的MFC应用程序中显示一个JPG文件

在VB中,我可以通过创建一个图像控件来显示一个JPG或GIF文件,但是我如何在我的MFC应用程序中显示一个JGP文件呢? 好问题!有时使用VB的程序员觉得这个很容易.只要往你的表中拖入一个图像控件,然后你就可以往下做了--然而C++程序员就不得不感到烦恼和头疼.那我们要做些什么呢,编写我们自己的JPG解压函数吗? 当然不是这样的!事实上,C/C++程序员能够使用与VB程序员所使用的非常类似(可以说是差不多)的图像控件.我并没有开玩笑.VB图像控件是基于一个叫"IPicture"的系统C

delphi程序全屏显示无标题栏覆盖整个屏幕

delphi 简单实现程序全屏显示无标题栏,覆盖整个屏幕,这个在做工控机或屏保时有用的,具体代码如下,感兴趣的朋友可以参考下哈   delphi 程序全屏显示无标题栏,覆盖整个屏幕,这个在做工控机或屏保时有用的,所以记下 复制代码 代码如下: procedure TMainFrm.FormCreate(Sender: TObject); begin with MainFrm do begin { Position form } Top := 0 ; Left := 0 ; { Go full s

在Word2003中打开和关闭“全屏显示”视图

  在Word2003文档"全屏显示"视图中,标题栏.菜单栏.工具栏.状态栏以及其他的元素都被隐藏起来了,从而使有限的屏幕空间可以更多地显示文档内容.在该视图方式中用户可以输入和编辑文本,也可以选择常用的键盘命令.为了扩大Word2003文档窗口编辑区域,用户可以依次单击"视图"→"全屏显示"菜单命令切换到"全屏显示"视图,如图1所示. 图1 Word2003"全屏显示"视图 在Word2003文档&quo

delphi程序全屏显示无标题栏覆盖整个屏幕(适合屏保)_Delphi

delphi 程序全屏显示无标题栏,覆盖整个屏幕,这个在做工控机或屏保时有用的,所以记下 复制代码 代码如下: procedure TMainFrm.FormCreate(Sender: TObject); begin with MainFrm do begin { Position form } Top := 0 ; Left := 0 ; { Go full screen} BorderStyle := bsNone ; WindowState := wsmaximized; ClientW

页面打开时短时间内全屏显示flash然后自动隐藏,在asp.net中如何实现啊(急)

问题描述 如题页面打开时短时间内全屏显示flash然后自动隐藏,在asp.net中如何实现啊?高手帮忙哦