文/青岛郎锐
三、 程序的具体实现
前面部分在大体思路上对程序的设计实现进行了粗略的分析,但在实际编程中有不少的细节还未考虑进去,下面就根据前面的程序设计思路对其进行编码,并结合其部分关键代码进行讲解说明,以便于更好的理解本程序的实现方法:
全屏显示部分:
//通过设置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编译通过。
[上一页] [1] [2]
|