程式介面多模式顯示的實現 (轉)
介面多顯示的實現:namespace prefix = o ns = "urn:schemas--com::office" />
作者:徐景周
相關示例原始碼( ?paper_id=311 )
如果你用過Real器的話,那就一定對它的多模式顯示方式不會陌生吧!RealPlayer擁有正常和精簡兩種顯示模式。我們有時也想在自己的程式介面上實現類似的功能,該怎樣實現呢?下面拿我用VC6.0做的一個多模式顯示程式示例來向大家展示,它是怎樣實現類似功能的。如下圖所示:(圖一) 正常顯示模式;(圖二)簡潔顯示模式,無檢視;(圖三),精簡顯示模式,僅工具條。
圖一
圖二
圖三
基本構成思想:
實現原理很簡單,只要分別獲取窗體大小、客戶區大小、工具條大小、狀態條大小、邊框大小以及標題欄大小,既可根據不同顯示模式,計算出不同的新窗體的高度(關鍵在於要重新計算高度,寬度)。如:簡潔顯示模式(無檢視方式下),為寬度不變、高度=窗體高度-客戶區高度-狀態條高度-邊框高度既可。精簡顯示模式(僅工具條方式下),為寬度不變,先隱藏選單、高度=標題欄高度+工具條高度+邊框高度既可。正常顯示模式,我想就不用說了吧!其實就是這麼簡單,RealPlayer是寬度,高度一起改變並計算,本示例只簡單的改變高度,寬度不變,但基本原理是相同的。下面讓我們來看看它的程式碼實現情況吧!
關鍵程式碼實現:
我做了一個涵數,本示例程式只需此涵數便可實現。其中當nViewType傳值為0時,為正常顯示模式、傳值為1時,為簡潔顯示模式、傳值為2時,為精簡顯示模式。
void CMainFrame::ViewMode(int nViewType)
{
CRect ClientRect;
CRect WindowRect;
CRect ToolbarRect;
CRect StatarRect;
//獲取窗體、客戶區及工具條大小
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_H);
//新窗體寬、高
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);
}
以上部分程式碼具體實現的細節問題,可在下載例項程式碼後,仔細檢視原始碼既可(內有詳細註釋)。
聯絡方式:
地址:陝西省西安市勞動路2號院六單元
郵編:710082
作者E:
未來工作室(Future Studio)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992792/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [轉]:多程式等待的跨平臺實現
- java 介面,介面的特性,介面實現多型,面向介面程式設計Java多型程式設計
- HTML5網頁遮罩層 + Iframe實現介面自動顯示的示例程式碼HTML網頁遮罩
- Swift 空資料介面顯示模組封裝實現Swift封裝
- [MAUI程式設計]介面多型與實現UI程式設計多型
- 標籤的顯示模式模式
- Geoserver + MySQL實現圖層顯示和文字顯示ServerMySql
- Flutter 如何將程式碼顯示到介面上Flutter
- 【IDL】滑鼠資訊顯示介面(同理可實現鷹眼圖等)
- ExpandableListView實現二級列表的顯示View
- 玩轉Golang的channel,二百行程式碼實現PubSub模式Golang行程模式
- css 元素顯示模式CSS模式
- shell的多程式實現
- ping 多臺伺服器並在類似 top 的介面中顯示伺服器
- 使用jquery.i18n實現國際化多語言顯示jQuery
- Runnable介面實現多執行緒執行緒
- webapi 配置介面註釋顯示WebAPI
- 線上直播系統原始碼,實現搜尋後介面顯示商品列表效果原始碼
- vue顯示多個空格Vue
- jQuery 實現顯示與隱藏效果jQuery
- Java之實現多執行緒的方式二:實現Runnable介面Java執行緒
- JS實現單例模式的多種方案JS單例模式
- CSS筆記-2:元素的顯示模式CSS筆記模式
- java實現將資料庫資料轉化成excel表格顯示出來Java資料庫Excel
- Go 實現常用設計模式(四)介面卡模式Go設計模式
- svg轉iconfront不顯示SVG
- 小程式實現微信 【我的】介面
- uniapp uni.showModal的content實現換行顯示APP
- android關鍵字特殊顏色顯示的實現Android
- css實現文字過長顯示省略號的方法CSS
- 串列埠通訊gui介面顯示串列埠GUI
- XManager:xshell顯示圖形化介面
- 使用C#跨PC 遠端呼叫程式並顯示UI介面C#UI
- php怎麼實現定位地圖顯示PHP地圖
- QLabel顯示圖片 ,並實現縮放
- 前端教程分享:十行程式碼實現title滾動顯示前端行程
- 好程式設計師分享CSS標籤的分類、及顯示模式程式設計師CSS模式
- Go語言實現GoF設計模式:介面卡模式Go設計模式
- 設計模式學習-使用go實現介面卡模式設計模式Go