程序界面多模式显示的实现

布拉格广场故事

布拉格广场故事

2016-01-29 11:51

程序界面多模式显示的实现,程序界面多模式显示的实现

程序界面多模式显示的实现
作者:徐景周

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

下载本文示例源代码

如果你用过RealPlayer播放器的话,那就一定对它的多模式显示方式不会陌生吧!RealPlayer拥有正常和精简两种显示模式。我们有时也想在自己的程序界面上实现类似的功能,该怎样实现呢?下面拿我用VC6.0做的一个多模式显示程序示例来向大家展示,它是怎样实现类似功能的。如下图所示:(图一) 正常显示模式;(图二)简洁显示模式,无视图;(图三),精简显示模式,仅工具条。


图一


图二


图三

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/) 基本构成思想:
实现原理很简单,只要分别获取窗体大小、客户区大小、工具条大小、状态条大小、边框大小以及标题栏大小,既可根据不同显示模式,计算出不同的新窗体的高度(关键在于要重新计算高度,宽度)。如:简洁显示模式(无视图方式下),为宽度不变、高度=窗体高度-客户区高度-状态条高度-边框高度既可。精简显示模式(仅工具条方式下),为宽度不变,先隐藏菜单、高度=标题栏高度+工具条高度+边框高度既可。正常显示模式,我想就不用说了吧!其实就是这么简单,RealPlayer是宽度,高度一起改变并计算,本示例只简单的改变高度,宽度不变,但基本原理是相同的。下面让我们来看看它的代码实现情况吧!

关键代码实现:
我做了一个涵数,本示例程序只需调用此涵数便可实现。其中当nViewType传值为0时,为正常显示模式、传值为1时,为简洁显示模式、传值为2时,为精简显示模式。

void CMainFrame::ViewMode(int nViewType){CRect ClientRect;CRect WindowRect;CRect ToolbarRect;CRect StatusbarRect;//获取窗体、客户区及工具条大小WindowRect = m_WindowRect;ClientRect = m_ClientRect;m_wndToolBar.GetWindowRect(&ToolbarRect);//获取边框及标题栏大小int borderHeight = GetSystemMetrics(SM_CYBORDER);int captionHeight = GetSystemMetrics(SM_CYCAPTION);//获取状态条大小CStatusBar* pStatus = (CStatusBar*) AfxGetApp()->m_pMainWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR);pStatus->GetWindowRect(&StatusbarRect);//停靠工具条DockControlBar(&m_wndToolBar);int CompactCx;//新窗体宽int CompactCy;//新窗体高//以多种模式显示switch(nViewType){case 0:     //正常显示模式{//显示菜单if ( hMenu != NULL )::SetMenu( m_hWnd, hMenu );//显示状态条pStatus->ShowWindow(SW_SHOW);//新窗体宽、高CompactCx=WindowRect.Width();CompactCy=WindowRect.Height();}break;case 1://简洁显示模式{//显示菜单if ( hMenu != NULL )::SetMenu( m_hWnd, hMenu );//隐藏状态条pStatus->ShowWindow(SW_HIDE);//新窗体宽、高CompactCx=WindowRect.Width();CompactCy=WindowRect.Height() - ClientRect.Height() + ToolbarRect.Height() - borderHeight;}break;case 2://精简显示模式{//隐藏菜单hMenu = ::GetMenu(m_hWnd);::SetMenu( m_hWnd, NULL );//隐藏状态条pStatus->ShowWindow(SW_HIDE);//新窗体宽、高CompactCx=WindowRect.Width();CompactCy=captionHeight + ToolbarRect.Height() + borderHeight*2;}break;}//设置新窗体显示SetWindowPos( &wndTop, WindowRect.left, WindowRect.top, CompactCx, CompactCy, SWP_SHOWWINDOW);  }
以上部分代码具体实现的细节问题,可在下载实例代码后,仔细查看源码既可
展开更多 50%)
分享

猜你喜欢

程序界面多模式显示的实现

C语言教程 C语言函数
程序界面多模式显示的实现

程序界面多模式显示

C语言教程 C语言函数
程序界面多模式显示

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

VC程序界面多模式显示

编程语言 网络编程
VC程序界面多模式显示

VB程序实现XP效果的界面

编程语言 网络编程
VB程序实现XP效果的界面

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

repeater实现多列显示

Web开发
repeater实现多列显示

Android中设置只有程序第一次运行才显示的界面实现思路

编程语言 网络编程
Android中设置只有程序第一次运行才显示的界面实现思路

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

网页制作中的小秘诀

网页制作中的小秘诀

关于iframe的透明背景

关于iframe的透明背景
下拉加载更多内容 ↓