当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 程序界面多模式显示的实现

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 47 ::
收藏到网摘: n/a

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

下载本文示例源代码

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


图一


图二


图三

基本构成思想:
实现原理很简单,只要分别获取窗体大小、客户区大小、工具条大小、状态条大小、边框大小以及标题栏大小,既可根据不同显示模式,计算出不同的新窗体的高度(关键在于要重新计算高度,宽度)。如:简洁显示模式(无视图方式下),为宽度不变、高度=窗体高度-客户区高度-状态条高度-边框高度既可。精简显示模式(仅工具条方式下),为宽度不变,先隐藏菜单、高度=标题栏高度+工具条高度+边框高度既可。正常显示模式,我想就不用说了吧!其实就是这么简单,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); }
以上部分代码具体实现的细节问题,可在下载实例代码后,仔细查看源码既可