鉴于大家对ASP.net十分关注,我们编辑小组在此为大家搜集整理了“程序界面多模式显示的实现”一文,供大家参考学习!
如果我们想在程序界面上实现象RealPlayer播放器那样有正常和精简两种显示模式,该怎样实现呢?下面我用VC6.0做的一个多模式显示程序示例来向大家展示,它是怎样实现类似功能的。如下图所示:(图一) 正常显示模式;(图二)简洁显示模式,无视图;(图三),精简显示模式,仅工具条。图一 |
图二 |
图三 |
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); } |