软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|Java 运行时监控
您现在的位置: 天极网 > 开发频道 > VC++实现单文档程序的全屏显示及恢复
全文

VC++实现单文档程序的全屏显示及恢复

2005-09-15 08:57作者:青岛郎锐出处:天极网责任编辑:方舟
  三、 程序的具体实现

  前面部分在大体思路上对程序的设计实现进行了粗略的分析,但在实际编程中有不少的细节还未考虑进去,下面就根据前面的程序设计思路对其进行编码,并结合其部分关键代码进行讲解说明,以便于更好的理解本程序的实现方法:

  全屏显示部分:

//通过设置SW_HIDE参数隐藏当前的工具条、任务栏
m_bToolBarWasVisible=(m_wndToolBar.IsWindowVisible()!=0);
m_wndToolBar.ShowWindow(SW_HIDE);
m_bStatusBarWasVisible=(m_wndStatusBar.IsWindowVisible()!=0);
m_wndStatusBar.ShowWindow(SW_HIDE);
……
//由于在全屏状态下没有系统菜单和工具条,所以需要显示一个浮动的工具条按钮用于//从全屏状态下返回到正常状态。
//首先创建一个工具条对象,并把一个工具条资源装载进来,同时对工具条的风格进行//设置:
m_pwndFullScreenBar=new CToolBar;
m_pwndFullScreenBar->Create(this);
m_pwndFullScreenBar->LoadToolBar(IDR_FULLSCREEN);
m_pwndFullScreenBar->SetBarStyle(m_pwndFullScreenBar->GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
//浮动按钮的效果
m_pwndFullScreenBar->ModifyStyle(0, TBSTYLE_FLAT);
m_pwndFullScreenBar->EnableDocking(0);
//设置返回到正常状态下的按钮的位置
CPoint pt(300,200);
FloatControlBar(m_pwndFullScreenBar,pt);
//在放大到满屏前预先保存当前的窗口位置
GetWindowRect(&m_mainRect);
//通过改变窗口风格来隐藏标题栏
LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
style&=~WS_CAPTION;
::SetWindowLong(m_hWnd,GWL_STYLE,style);
int screenx=GetSystemMetrics(SM_CXSCREEN);
int screeny=GetSystemMetrics(SM_CYSCREEN);
//重新改变大小:
SetWindowPos(NULL,0,0,screenx,screeny,SWP_NOZORDER);
style=::GetWindowLong(m_hWnd,GWL_STYLE);
m_bChildMax=(style & WS_MAXIMIZE)?true:false;
//保存原有的系统菜单,并将当前菜单设置为空
CMenu* pOldMenu=GetMenu();
m_OrgMenu.Attach(pOldMenu->Detach());
SetMenu((CMenu*)NULL);
//在其他窗体隐藏好后,将编辑视图放大到满屏
this->ShowWindow (SW_SHOWMAXIMIZED);
……

  至于从全屏恢复到初始状态的这部分代码则相对比较简单,只需依次将隐藏的各个窗体和菜单恢复出来并将视图移动到原来大小即可,该段代码许多地方同放大到全屏时的代码相似,只是参数有所差异而已。下面就是恢复部分的主要代码:

……
//将保存的系统菜单恢复出来
SetMenu(&m_OrgMenu);
m_OrgMenu.Detach();
//释放掉在全屏时创建的工具条指针对象,由于是用new创建的,在系统堆中为指针分//配地址空间,在程序退出时不能自动释放,所以必须要用delete显式地进行释放
delete m_pwndFullScreenBar;
//把前面剥离出去的WS_CAPTION风格在加入到窗体风格中。
LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
style|=WS_CAPTION;
::SetWindowLong(m_hWnd,GWL_STYLE,style);
//显示工具条、任务栏
if(m_bToolBarWasVisible)
m_wndToolBar.ShowWindow(SW_SHOW);
if(m_bStatusBarWasVisible)
m_wndStatusBar.ShowWindow(SW_SHOW);
MoveWindow(&m_mainRect);
RecalcLayout();
……

  小结:

  本文主要是针对单文档框架的程序进行设计的,由于不涉及到子窗体,因此比较简单。对于多文档的全屏放大,实现方法在总体思路上是与之相一致的。只是在处理全屏显示与恢复时需要将程序子框架也响应的进行放大与缩小,标题栏也要通过改变窗口风格的方式来隐藏与恢复显示。本程序对于其他基于非编辑视图的程序也是适用的。本文所述程序在Windows 2000 Professional下由Microsoft Visual C++ 6.0编译通过。
共2页。 首页 上一页 1 2
相关搜索:
相关文章及软件
关注此文读者还看过
热门关注
特别推荐
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 Powered by 天极内容管理平台CMS4i
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众